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 -ltr
często, możesz utworzyć alias, który zastępujels -ltr
kiedy wydajesz poleceniel
:innym powszechnym zastosowaniem aliasów jest ochrona przed błędami., Poniższy przykład zastępuje interaktywną wersję narzędzia
rm
po wprowadzeniu poleceniazap
:$ alias zap='rm -i' $ zap f* rm: remove 'fixtax.icn'? n rm: remove 'flute.ps'? n rm: remove 'floor'? nopcja-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ż aliasrm
za pomocą poleceniarm -i
:alias rm='rm ‒i'
.,aliasy w następnym przykładzie powodują zastąpienie powłoki
ls -l
za każdym razem, gdy podajesz poleceniell
Ils ‒F
za każdym razem, gdy używaszls
.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 aliasls
, więc następuje drugie podstawienie w celu wytworzenia ostatecznego polecenials ‒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
lubvalue
, wbudowanyalias
wyświetla wartość każdego zdefiniowanego aliasu., Wbudowanyalias
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 foundmoż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 testdirponieważ 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 wbudowanyalias
, 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