Articles

Cum se utilizează pseudonime în comenzile Linux shell

Acest articol este retipărit din carte Un ghid practic pentru comenzile Linux, editorii și programarea Shell ediția a 3-A, cu permisiunea autorului și editorului Prentice Hall, Toate drepturile rezervate.

un alias este un nume (de obicei scurt) pe care shell-ul îl traduce într-un alt nume sau comandă (de obicei mai lungă). Aliasurile vă permit să definiți comenzi noi înlocuind un șir pentru primul jeton al unei comenzi simple. Acestea sunt de obicei plasate în~/.bashrc (bash)sau~/.,tcshrc (tcsh) fișiere de pornire, astfel încât acestea să fie disponibile pentru subshell-uri interactive.

Sub bash sintaxa alias interna este

alias ]

Sub tcsh sintaxa este

alias ]

În bash sintaxa fără spații sunt permise în jurul valorii de semnul egal. Dacă valoarea conține spații sau File, trebuie să adăugați valoare între ghilimele. Spre deosebire de aliasurile sub tcsh, un alias bash nu acceptă un argument din linia de comandă în valoare., Utilizați o funcție bash atunci când trebuie să utilizați un argument.

Un alias nu înlocuiește în sine, care evită posibilitatea de recursivitate infinită în manipularea un alias, cum ar fi următoarele:

alias ls='ls -F'

puteți cuib pseudonime. Aliasurile sunt dezactivate pentru shell-urile neinteractive (adică scripturile shell). Utilizațiunalias builtin pentru a elimina un alias., Când dai un alias builtin comanda fara nici un argument, shell-ul afișează o listă a tuturor definite pseudonime:

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

Pentru a vizualiza alias pentru un anumit nume, introduceți comanda alias urmat de numele de alias. Majoritatea distribuțiilor Linux definesc cel puțin unele pseudonime. Introduceți o comandă alias pentru a vedea care pseudonime sunt în vigoare. Puteți șterge aliasurile pe care nu le doriți din fișierul de pornire corespunzător.,

ghilimele simple versus duble în pseudonime

alegerea ghilimelelor simple sau duble este semnificativă în sintaxa aliasului atunci când aliasul include variabile. Dacă încadrați valoarea între ghilimele duble, orice variabile care apar în valoare sunt extinse atunci când aliasul este creat. Dacă adăugați valoare între ghilimele unice, variabilele nu sunt extinse până când aliasul nu este utilizat. Următorul exemplu ilustrează diferența.

variabila de cuvinte cheie PWD deține numele de cale al directorului de lucru., Max creează două pseudonime în timp ce lucrează în directorul său de acasă. Deoarece folosește ghilimele duble atunci când creează aliasul dirA, shell-ul înlocuiește valoarea directorului de lucru atunci când creează acest alias. Alias dirA de comandă afișează dirA alias și arată că schimbarea a avut deja loc:

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

atunci Când Max creează dirB alias, el folosește ghilimele simple, care împiedică coajă de extinderea $PWD variabilă., Alias dirB comandă arată că dirB alias deține încă neexpandate $PWD variabilă:

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

După crearea dirA și dirB pseudonime, Max foloseste cd pentru a face masinile lui director de lucru și oferă fiecare dintre pseudonime ca o comandă. Aliasul pe care l-a creat folosind ghilimele duble afișează numele directorului în care a creat aliasul ca director de lucru (ceea ce este greșit)., În schimb, dirB alias afișează numele propriu de directorul de lucru:

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

SFAT: Cum pentru a preveni shell de a invoca un alias

shell verifică numai simplu, necotate comenzi pentru a vedea dacă acestea sunt false. Comenzile date ca nume de cale relative sau absolute și comenzile citate nu sunt verificate. Când vrei să dai o comandă care are un alias, dar nu doriți să utilizați alias, preced comanda cu un backslash, specificați la comandă absolută pathname, sau dau comanda ca ./command.,

Exemple de pseudonime

următoarele alias vă permite să tastați r pentru a repeta comanda anterioară sau r abc pentru a repeta ultima linie de comandă, care a început cu abc:

$ alias r='fc -s'

Dacă utilizați comanda ls -ltr frecvent, puteți crea un alias care substituie ls -ltr cand dau comanda l:

un Alt uz comun de alias-uri este de a te proteja de greșeli., Următorul exemplu substituie versiune interactivă a rm utilitate atunci când introduceți comanda zap:

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

– eu opțiune cauze rm să vă întreb pentru a verifica fiecare fișier pe care ar fi eliminat, astfel ajutându-vă să evitați ștergerea fișier greșit. Puteți, de asemenea, alias rm cu rm -i command: alias rm='rm ‒i'.,

nume în următorul exemplu că shell a substitui ls -l de fiecare dată când dai un ll comandă și ls ‒F de fiecare dată când utilizați ls.-F opțiune cauze ls pentru a imprima un slash (/) la sfârșitul director nume și un asterisc (*) la sfârșitul numelor de fișiere executabile.,

În acest exemplu, șirul care înlocuiește alias ll (ls ‒l) conține în sine un alias (ls). Când înlocuiește un alias cu valoarea sa, shell-ul se uită la primul cuvânt al șirului de înlocuire pentru a vedea dacă este un alias. În exemplul precedent, șirul de înlocuire conține alias ls, deci o a doua substituție apare pentru a produce la comanda finală ls ‒F ‒l., (Pentru a evita o plonjare recursivă, ls în textul de înlocuire, deși un alias, nu este extins a doua oară.)

atunci Când a dat o lista de alias-uri fără =value sau value câmp, alias interna afișează valoarea fiecărui definite alias., alias interna raportează o eroare daca un alias nu a fost definit:

$ 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

puteți evita alias substituție prin care precede alias comanda cu un backslash (\):

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

Pentru înlocuirea unui nume cu alias valoarea nu se modifică restul de linie de comandă, orice argumente sunt încă primite de comanda care este executat:

$ 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*

puteți elimina un alias folosind unalias interna., Când zap alias este eliminat, acesta nu mai este afișat de către alias interna, iar utilizarea sa ulterioară ca rezultat un mesaj de eroare:

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