Articles

Hoe aliassen te gebruiken in Linux shell commando ‘ s

Dit artikel is herdrukt uit het boek A Practical Guide to Linux Commands, Editors, and Shell Programming 3rd edition, met toestemming van de auteur en uitgever Prentice Hall, Alle rechten voorbehouden.

een alias is een (meestal korte) naam die de shell vertaalt naar een andere (meestal langere) naam of commando. Met aliassen kunt u nieuwe commando ‘ s definiëren door een tekenreeks te vervangen voor het eerste token van een eenvoudig commando. Ze worden meestal geplaatst in de~/.bashrc (bash) of ~/.,tcshrc (tcsh) opstartbestanden zodat ze beschikbaar zijn voor interactieve subshells.

Onder bash de syntaxis van de alias builtin is

alias ]

Onder tcsh de syntax is:

alias ]

In de bash-syntaxis geen spaties zijn toegestaan rond de is-gelijk-teken. Als waarde spaties of tabs bevat, moet u waarde tussen aanhalingstekens omsluiten. In tegenstelling tot aliassen onder tcsh, accepteert een bash alias geen argument van de commandoregel in waarde., Gebruik een bash-functie wanneer je een argument moet gebruiken.

een alias vervangt zichzelf niet, wat de mogelijkheid van oneindige recursie vermijdt bij het hanteren van een alias zoals:

alias ls='ls -F'

u kunt aliassen nestelen. Aliassen zijn uitgeschakeld voor niet-interactief shells (dat wil zeggen, shell scripts). Gebruik deunalias ingebouwde om een alias te verwijderen., Als u een alias ingebouwde opdracht geeft zonder argumenten, toont de shell een lijst van alle gedefinieerde aliassen:

$ alias alias ll='ls -l' alias l='ls -ltr' alias ls='ls -F' alias zap='rm -i'

om de alias voor een bepaalde naam te bekijken, voert u de opdrachtalias in gevolgd door de naam van de alias. De meeste Linux distributies definiëren op zijn minst enkele aliassen. Voer een alias commando in om te zien welke aliassen van kracht zijn. U kunt de aliassen die u niet wilt verwijderen uit het juiste opstartbestand.,

enkele versus dubbele aanhalingstekens in aliassen

de keuze van enkele of dubbele aanhalingstekens is significant in de alias syntaxis wanneer de alias variabelen bevat. Als u waarde tussen dubbele aanhalingstekens omsluit, worden alle variabelen die in waarde worden weergegeven, uitgebreid wanneer de alias wordt gemaakt. Als u waarde tussen enkele aanhalingstekens omsluit, worden variabelen niet uitgebreid totdat de alias wordt gebruikt. Het volgende voorbeeld illustreert het verschil.

de variabele PWD-sleutelwoord bevat de padnaam van de werkmap., Max maakt twee aliassen terwijl hij in zijn home directory werkt. Omdat hij dubbele aanhalingstekens gebruikt wanneer hij de Dira alias maakt, vervangt de shell de waarde van de werkdirectory wanneer hij deze alias maakt. Het alias dirA commando toont de Dira alias en laat zien dat de substitutie al heeft plaatsgevonden:

 $ echo $PWD /home/max $ alias dirA="echo Working directory is $PWD" $ alias dirA alias dirA='echo Working directory is /home/max' 

wanneer Max de dirB alias maakt, gebruikt hij enkele aanhalingstekens, die voorkomen dat de shell de $PWD variabele uitbreidt., Het alias dirB commando laat zien dat de dirB alias nog steeds de niet uitgebreide $PWD variabele bevat:

 $ alias dirB='echo Working directory is $PWD' $ alias dirB alias dirB='echo Working directory is $PWD'

na het aanmaken van de Dira en dirB aliassen, gebruikt Max cd om cars zijn werk directory te maken en geeft elk van de aliassen als een commando. De alias die hij gemaakt heeft met dubbele aanhalingstekens geeft de naam weer van de map waarin hij de alias gemaakt heeft als werkmap (wat verkeerd is)., Daarentegen toont de dirB alias de eigennaam van de werkmap:

 $ cd cars $ dirA Working directory is /home/max $ dirB Working directory is /home/max/cars

TIP: hoe te voorkomen dat de shell een alias aanroept

De shell controleert alleen eenvoudige, niet-Geciteerd commando ‘ s om te zien of het aliassen zijn. Commando ’s gegeven als relatieve of absolute padnamen en geciteerde commando’ s worden niet gecontroleerd. Als u een commando wilt geven dat een alias heeft maar de alias niet wilt gebruiken, moet u het commando voorafgaan met een backslash, de absolute padnaam van het commando opgeven, of het commando geven als ./command.,

Voorbeelden van aliassen

De volgende alias kunt u het type r herhaal de vorige opdracht of r abc om het herhalen van de laatste commando lijn die begon met abc:

$ alias r='fc -s'

Als u het commando ls -ltr vaak gebruikt, kunt u een alias vervangt ls -ltr wanneer geef je het commando l:

een Ander gemeenschappelijk gebruik van aliassen is om jezelf te beschermen tegen fouten., Het volgende voorbeeld vervangt de interactieve versie van het hulpprogramma rm wanneer u het commando zapinvoert:

$ alias zap='rm -i' $ zap f* rm: remove 'fixtax.icn'? n rm: remove 'flute.ps'? n rm: remove 'floor'? n

de optie-i zorgt ervoor dat rm U vraagt om elk bestand dat zou worden verwijderd te verifiëren, waardoor u de verkeerde kunt verwijderen.dossier. U kunt ook rm alias met het rm -i Commando: alias rm='rm ‒i'.,

de aliassen in het volgende voorbeeld zorgen ervoor dat de shell ls -l vervangt elke keer dat u een ll commando geeft en ls ‒F elke keer dat u lsgebruikt.De optie -F zorgt ervoor dat ls een schuine streep (/) aan het einde van mapnamen en een sterretje (*) aan het einde van de namen van uitvoerbare bestanden wordt afgedrukt.,

in dit voorbeeld bevat de tekenreeks die de alias ll (ls ‒l) vervangt een alias (ls). Wanneer het een alias vervangt door zijn waarde, kijkt de shell naar het eerste woord van de vervangende tekenreeks om te zien of het een alias is. In het vorige voorbeeld bevat de vervangende tekenreeks de alias ls, dus een tweede substitutie vindt plaats om het uiteindelijke Commando ls ‒F ‒lte produceren., (Om een recursieve inval te voorkomen, wordt de ls in de vervangende tekst, hoewel een alias, niet een tweede keer uitgebreid.)

wanneer een lijst met aliassen wordt gegeven zonder het =value of value veld, toont de alias ingebouwde waarde van elke gedefinieerde alias., De alias ingebouwde meldt een fout als een alias is niet gedefinieerd:

$ alias ll l ls zap wx alias ll='ls -l' alias l='ls -ltr' alias ls='ls -F' alias zap='rm -i' bash: alias: wx: not found

U kunt voorkomen alias vervanging door voorafgaand aan de aliased opdracht met een backslash (\):

$ \ls Test_Emacs XTerm.ad flute.ps maptax.icn Tiger fixtax.icn floor testdir

Omdat de vervanging van een alias met de alias van de waarde is niet van invloed op de rest van de commando regel argumenten zijn nog steeds ontvangen door de opdracht die wordt uitgevoerd:

$ ll f* -rw-r--r--. 1 max pubs 641 04-01 08:12 fixtax.icn -rw-r--r--. 1 max pubs 30015 03-01 14:24 flute.ps -rwxr-xr-x. 1 max pubs 485 09-21 08:03 floor*

U kunt het verwijderen van een alias met de unalias ingebouwd., Wanneer de ZAP alias is verwijderd, wordt deze niet langer weergegeven door de alias builtin, en het daaropvolgende gebruik resulteert in een foutmelding:

$ unalias zap $ alias alias ll='ls -l' alias l='ls -ltr' alias ls='ls -F' $ zap maptax.icn bash: zap: command not found