Articles

Jak używać aliasów w poleceniach powłoki Linuksa

Ten artykuł został przedrukowany z książki A Practical Guide to Linux Commands, Editors, and Shell Programming 3rd edition, za zgodą autora i wydawcy Prentice Hall, all rights reserved.

alias to (zwykle krótka) nazwa, którą powłoka tłumaczy na inną (Zwykle dłuższą) nazwę lub polecenie. Aliasy umożliwiają definiowanie nowych poleceń poprzez zastąpienie ciągu znaków pierwszym tokenem prostego polecenia. Są one zazwyczaj umieszczane w~/.bashrc (bash) lub ~/.,pliki startowe tcshrc (tcsh), aby były dostępne dla interaktywnych podshellów.

pod bash składnia wbudowanego aliasu jest

alias ]

pod tcsh składnia jest

alias ]

w składni Bash nie są dozwolone spacje wokół znaku równości. Jeśli wartość zawiera spacje lub tabulatory, należy umieścić ją w cudzysłowach. W przeciwieństwie do aliasów pod tcsh, Alias bash nie akceptuje argumentu z wiersza poleceń w wartości., Użyj funkcji bash, gdy musisz użyć argumentu.

alias nie zastępuje się, co pozwala uniknąć nieskończonej rekurencji w obsłudze aliasu, takiego jak:

alias ls='ls -F'

możesz zagnieżdżać aliasy. Aliasy sÄ … wyĹ 'Ä … czone dla nieinteraktywnych powĺ' ok (czyli skryptĂłw powĺ ' ok). Użyj wbudowanegounalias, aby usunąć alias., Gdy podaszalias wbudowane polecenie bez żadnych argumentów, powłoka wyświetli listę wszystkich zdefiniowanych aliasów:

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

aby wyświetlić alias dla konkretnej nazwy, wprowadź alias polecenia, a następnie nazwę aliasu. Większość dystrybucji Linuksa definiuje przynajmniej niektóre aliasy. Wprowadź polecenie alias, aby sprawdzić, które aliasy są skuteczne. Możesz usunąć niepotrzebne aliasy z odpowiedniego pliku startowego.,

pojedynczy i podwójny cudzysłów w aliasach

wybór pojedynczego lub podwójnego cudzysłowu jest istotny w składni aliasów, gdy alias zawiera zmienne. Jeśli wartość zostanie zamknięta w podwójnych cudzysłowach, wszystkie zmienne pojawiające się w wartości zostaną rozszerzone podczas tworzenia aliasu. Jeśli wartość zostanie włączona do pojedynczych cudzysłowów, zmienne nie będą rozwijane, dopóki nie zostanie użyty alias. Poniższy przykład ilustruje różnicę.

zmienna kluczowa PWD zawiera ścieżkę do katalogu roboczego., Max tworzy dwa aliasy podczas pracy w swoim katalogu domowym. Ponieważ używa podwójnych cudzysłowów podczas tworzenia aliasu dirA, powłoka zastępuje wartość katalogu roboczego podczas tworzenia tego aliasu. Polecenie alias dirA wyświetla alias dirA i pokazuje, że zastąpienie już miało miejsce:

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

gdy Max tworzy alias dirB, używa pojedynczych cudzysłowów, które uniemożliwiają powłoce rozszerzenie zmiennej $PWD., Polecenie alias dirB pokazuje, że alias dirB nadal zawiera nieprzewidzianą zmienną $PWD:

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

Po utworzeniu aliasów dirA i dirB, Max używa cd aby uczynić cars swoim katalogiem roboczym i podaje każdy z aliasów jako polecenie. Alias utworzony za pomocą podwójnych cudzysłowów wyświetla nazwę katalogu, w którym alias został utworzony jako katalog roboczy (co jest błędne)., W przeciwieństwie do tego, alias dirB wyświetla właściwą nazwę katalogu roboczego:

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

wskazówka: jak zapobiec wywołaniu aliasu przez powłokę

powłoka sprawdza tylko proste, nienotowane polecenia, aby sprawdzić, czy są aliasami. Polecenia podane jako względne lub bezwzględne nazwy ścieżek i polecenia cytowane nie są sprawdzane. Jeśli chcesz podać komendę, która ma alias, ale nie chce go używać, poprzedź komendę z odwrotnym ukośnikiem, podaj absolutną nazwę ścieżki polecenia lub podaj polecenie jako ./command.,

przykłady aliasów

poniższy alias pozwala wpisać r aby powtórzyć poprzednie polecenie lub r abc aby powtórzyć ostatnią linię poleceń, która rozpoczęła się od abc:

iv

Jeśli używasz polecenia ls -ltrczęsto, możesz utworzyć alias, który zastępuje ls -ltrkiedy wydajesz polecenie l:

innym powszechnym zastosowaniem aliasów jest ochrona przed błędami., Poniższy przykład zastępuje interaktywną wersję narzędzia rm po wprowadzeniu polecenia zap:

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

opcja-i powoduje, że rm poprosi Cię o zweryfikowanie każdego pliku, który zostanie usunięty, pomagając w ten sposób uniknąć usunięcia niewłaściwego pliku. Możesz również alias rm za pomocą polecenia rm -i: alias rm='rm ‒i'.,

aliasy w następnym przykładzie powodują zastąpienie powłoki ls -l za każdym razem, gdy podajesz polecenie ll I ls ‒F za każdym razem, gdy używasz ls.Opcja-F powoduje, żels wyświetla ukośnik (/) na końcu nazw katalogów i gwiazdkę (*) na końcu nazw plików wykonywalnych.,

w tym przykładzie łańcuch, który zastępuje alias ll(ls ‒l), sam zawiera alias (ls). Gdy zastępuje alias swoją wartością, powłoka patrzy na pierwsze słowo zastępczego łańcucha, aby sprawdzić, czy jest to alias. W poprzednim przykładzie łańcuch zastępczy zawiera alias ls , więc następuje drugie podstawienie w celu wytworzenia ostatecznego polecenia ls ‒F ‒l., (Aby uniknąć rekurencyjnego zanurzenia, ls w tekście zastępczym, mimo aliasu, nie jest rozwijany po raz drugi.)

gdy podano listę aliasów bez pola =value lub value, wbudowany alias wyświetla wartość każdego zdefiniowanego aliasu., Wbudowany alias zgłasza błąd, jeśli alias nie został zdefiniowany:

$ 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

możesz uniknąć zastępowania aliasów poprzedzając polecenie aliased z odwrotnym ukośnikiem (\):

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

ponieważ zastąpienie nazwy aliasu wartością aliasu nie zmienia reszty wiersza poleceń, wszelkie argumenty są nadal odbierane przez wykonywane polecenie:

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

możesz usunąć Alias używając wbudowanego unalias., Po usunięciu aliasu zap, nie jest on już wyświetlany przez wbudowany alias, a jego późniejsze użycie powoduje komunikat o błędzie:

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