Verwendung von Aliasen in Linux-Shell-Befehlen
Dieser Artikel ist aus dem Buch Ein praktischer Leitfaden für Linux-Befehle, Editoren und Shell-Programmierung 3.Auflage, mit Genehmigung des Autors und Publisher Prentice Hall, alle Rechte vorbehalten.
Ein Alias ist ein (normalerweise kurzer) Name, den die Shell in einen anderen (normalerweise längeren) Namen oder Befehl übersetzt. Mit Aliasen können Sie neue Befehle definieren, indem Sie eine Zeichenfolge für das erste Token eines einfachen Befehls ersetzen. Sie sind in der Regel in der ~ / platziert.bashrc (bash) oder ~/.,tcshrc (tcsh) Startdateien, so dass sie interaktive Subshells zur Verfügung stehen.
Unter bash lautet die Syntax des eingebauten Aliases
alias ]
Unter tcsh lautet die Syntax
alias ]
In der bash Syntax sind keine Leerzeichen um das Gleichheitszeichen erlaubt. Wenn der Wert Leerzeichen oder Registerkarten enthält, müssen Sie den Wert in Anführungszeichen setzen. Im Gegensatz zu Aliasnamen unter tcsh akzeptiert ein Bash-Alias kein Argument von der Befehlszeile im Wert., Verwenden Sie eine Bash-Funktion, wenn Sie ein Argument verwenden müssen.
Ein Alias ersetzt sich nicht selbst, wodurch die Möglichkeit einer unendlichen Rekursion im Umgang mit einem Alias wie dem Folgenden vermieden wird:
alias ls='ls -F'
Sie können Aliase verschachteln. Aliase sind für nicht interaktive Shells (dh Shell-Skripte) deaktiviert. Verwenden Sie die integrierte unalias
, um einen Alias zu entfernen., Wenn Sie einen eingebauten Befehl alias
ohne Argumente angeben, zeigt die Shell eine Liste aller definierten Aliase an:
$ alias alias ll='ls -l' alias l='ls -ltr' alias ls='ls -F' alias zap='rm -i'
Um den Alias für einen bestimmten Namen anzuzeigen, geben Sie den Befehlsalias gefolgt vom Namen des Alias ein. Die meisten Linux-Distributionen definieren zumindest einige Aliase. Geben Sie einen Aliasbefehl ein, um zu sehen, welche Aliase wirksam sind. Sie können die gewünschten Aliase aus der entsprechenden Startdatei löschen.,
Einfache oder doppelte Anführungszeichen in Aliasnamen
Die Auswahl von einfachen oder doppelten Anführungszeichen ist in der Aliassyntax von Bedeutung, wenn der Alias Variablen enthält. Wenn Sie einen Wert in doppelte Anführungszeichen setzen, werden alle Variablen, die im Wert angezeigt werden, erweitert, wenn der Alias erstellt wird. Wenn Sie einen Wert in einfache Anführungszeichen setzen, werden Variablen erst erweitert, wenn der Alias verwendet wird. Das folgende Beispiel veranschaulicht den Unterschied.
Die Schlüsselwortvariable PWD enthält den Pfadnamen des Arbeitsverzeichnisses., Max erstellt zwei Aliase, während er in seinem Home-Verzeichnis arbeitet. Da er beim Erstellen des dirA-Alias doppelte Anführungszeichen verwendet, ersetzt die Shell beim Erstellen dieses Alias den Wert des Arbeitsverzeichnisses. Der Befehl alias dirA zeigt den dirA-Alias an und zeigt an, dass die Substitution bereits stattgefunden hat:
$ echo $PWD /home/max $ alias dirA="echo Working directory is $PWD" $ alias dirA alias dirA='echo Working directory is /home/max'
Wenn Max den dirB-Alias erstellt, verwendet er einzelne Anführungszeichen, die verhindern, dass die Shell die Variable $PWD erweitert., Der Befehl alias dirB zeigt, dass der Alias dirB immer noch die nicht verwendete Variable $PWD enthält:
$ alias dirB='echo Working directory is $PWD' $ alias dirB alias dirB='echo Working directory is $PWD'
Nach dem Erstellen der DIRA-und dirB-Aliase verwendet Max cd
, um Autos zu seinem Arbeitsverzeichnis zu machen, und gibt jeden der Aliase als Befehl an. Der Alias, den er mit doppelten Anführungszeichen erstellt hat, zeigt den Namen des Verzeichnisses an, in dem er den Alias als Arbeitsverzeichnis erstellt hat (was falsch ist)., Im Gegensatz dazu zeigt der dirB-Alias den richtigen Namen des Arbeitsverzeichnisses an:
$ cd cars $ dirA Working directory is /home/max $ dirB Working directory is /home/max/cars
TIPP: So verhindern Sie, dass die Shell einen Alias aufruft
Die Shell überprüft nur einfache, nicht abgefragte Befehle, um festzustellen, ob es sich um Aliase handelt. Befehle, die als relative oder absolute Pfadnamen und zitierte Befehle angegeben werden, werden nicht überprüft. Wenn Sie einen Befehl mit einem Alias angeben möchten, den Alias jedoch nicht verwenden möchten, gehen Sie dem Befehl mit einem Backslash voran, geben Sie den absoluten Pfadnamen des Befehls an oder geben Sie den Befehl als ./command
.,
Beispiele für Aliase
Mit dem folgenden Alias können Sie r
eingeben, um den vorherigen Befehl zu wiederholen, oder r abc
um die letzte Befehlszeile zu wiederholen, die mit abc begann:
$ alias r='fc -s'
Wenn Sie den Befehl ls -ltr
häufig verwenden, können Sie einen Alias erstellen, der ls -ltr
ersetzt, wenn Sie den Befehl l
:
geben., Das folgende Beispiel ersetzt die interaktive Version des Dienstprogramms rm
, wenn Sie den Befehl zap
eingeben:
$ alias zap='rm -i' $ zap f* rm: remove 'fixtax.icn'? n rm: remove 'flute.ps'? n rm: remove 'floor'? n
Die Option-i bewirkt, dass rm
Sie auffordert, jede zu löschende Datei zu überprüfen, um das Löschen der falschen Datei zu vermeiden. Sie können auch alias rm
mit dem rm -i
Befehl: alias rm='rm ‒i'
.,
Die Aliase im nächsten Beispiel führen dazu, dass die Shell jedes Mal ersetzt, wenn Sie einen ll
Befehl und ls ‒F
jedes Mal, wenn Sie ls
.Die Option -F
bewirkt, dass ls
einen Schrägstrich (/) am Ende der Verzeichnisnamen und ein Sternchen (*) am Ende der Namen ausführbarer Dateien druckt.,
In diesem Beispiel enthält die Zeichenfolge, die den Alias ersetzt ll
(ls ‒l
) selbst einen Alias (ls
). Wenn ein Alias durch seinen Wert ersetzt wird, prüft die Shell das erste Wort der Ersetzungszeichenfolge, um festzustellen, ob es sich um einen Alias handelt. Im vorhergehenden Beispiel enthält die Ersetzungszeichenfolge den Alias ls
, sodass eine zweite Ersetzung erfolgt, um den endgültigen Befehl ls ‒F ‒l
zu erzeugen., (Um einen rekursiven Sprung zu vermeiden, wird die ls
im Ersetzungstext, obwohl ein Alias, kein zweites Mal erweitert.)
Wenn eine Liste von Aliasnamen ohne das Feld =value
oder value
angegeben wird, zeigt das Feld alias
builtin den Wert jedes definierten Alias an., Das eingebaute alias
meldet einen Fehler, wenn kein Alias definiert wurde:
$ 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
Sie können die Alias-Substitution vermeiden, indem Sie dem Alias-Befehl einen Backslash voranstellen (\
):
$ \ls Test_Emacs XTerm.ad flute.ps maptax.icn Tiger fixtax.icn floor testdir
Da der Ersatz des Alias ein Aliasname mit dem Aliaswert ändert den Rest der Befehlszeile nicht, alle Argumente werden weiterhin von dem ausgeführten Befehl empfangen:
$ 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*
Sie können einen Alias mit der eingebauten unalias
entfernen., Wenn der zap-Alias entfernt wird, wird er nicht mehr vom eingebauten alias
angezeigt, und seine anschließende Verwendung führt zu einer Fehlermeldung:
$ unalias zap $ alias alias ll='ls -l' alias l='ls -ltr' alias ls='ls -F' $ zap maptax.icn bash: zap: command not found