Sie tun dies genauso, wie Sie einen Alias festlegen würden.
alias git-go='git commit -m "init "; git push; git status'
Die Situation, in der es schwierig wird, ist nicht, wenn ein Alias einen Befehl ausführt und Argumente an diesen Befehl übergibt, noch wenn ein Alias mehrere Befehle getrennt durch ausführt ;
, sondern wenn ein Alias seine eigenen Befehlszeilenargumente akzeptieren und verwenden soll .
Beispielsweise wird alles, was Sie nach dem Namen dieses Alias schreiben, am Ende eingefügt und anschließend als Befehlszeilenargument an den dritten git
Befehl übergeben git status
. (Es ist wirklich nicht so sehr so, dass der folgende Text am Ende eingefügt wird, sondern vielmehr, dass der folgende Text in Ruhe gelassen wird und der Aliasname durch seine Definition ersetzt wird.)
Sie können Ihren Alias also ohne Argumente ausführen, was funktioniert. Der letzte Befehl lautet git status
:
git-go
Oder Sie können es mit Argumenten ausführen, an die Sie übergeben möchten git status
. Wenn Sie es beispielsweise auf diese Weise ausführen, lautet der letzte Befehl git-status --show-stash
:
git-go --show-stash
Mit einem Alias in Bash (und anderen Shells im Bourne-Stil) können Sie nicht festlegen, dass der Alias Befehlszeilenargumente akzeptiert und an einer anderen Stelle als am Ende platziert.
Angenommen, Sie git-go
möchten ein Argument akzeptieren, das für die Festschreibungsnachricht verwendet wird. Sie können dies nicht als Alias schreiben. Die Lösung wäre, es stattdessen als Shell-Funktion zu schreiben:
git-go() { git commit -m "$1"; git push; git status; }
In der Definition einer Shell - Funktion, die Positionsparameter $1
, $2
und so halten weiter die Werte der Befehlszeilenargumente an die Shell - Funktion übergeben. Aliase haben keine entsprechende Funktionalität, da die Aliaserweiterung eine Form der Makroverarbeitung ist, die sehr früh stattfindet, wenn die Shell einen Befehl analysiert.
Sie können es natürlich auch als Shell-Funktion schreiben, auch wenn Sie in der Definition keine Positionsparameter verwenden müssen, wie Videonauth vorschlägt .