Ich möchte in zsh einen Alias erstellen, der meinen letzten Terminalbefehl ausführt, der mit beginnt node
. Ich kann diesen Befehl mit ausführen !?node
, aber ich kann keinen Alias mit erstellen alias N='!?node'
. Wie kann ich diesen Alias erstellen?
Antwort1
Die Verlaufserweiterung wird in Ihrer Befehlszeile durchgeführtVorAlias-Erweiterung. Das Einfügen einer Verlaufserweiterung in einen Alias funktioniert also nicht, da nach der Erweiterung des Alias keine Verlaufserweiterung mehr durchgeführt wird.
Die Parametererweiterung erfolgt dagegennachAlias-Erweiterung. Sie können stattdessen Folgendes verwenden:
alias N='"${(z)history[(r)node *]}"'
(r)
erhält das erste Vorkommen des Musters nach ihm. In diesem Fall wird das aktuellste übereinstimmende Historienelement abgerufen, da$history
wird immer vom Neusten zum Ältesten sortiert.(z)
analysiert den String als Code und gibt die resultierenden Shell-Wörter zurückAndernfalls wird die gesamte Erweiterung als ein einzelnes Wort behandelt.- Die
"
Anführungszeichen"
sind erforderlich, damit das Leerzeichen richtig analysiert wird. Andernfalls würde es als Worttrennzeichen behandelt, was zu einem Syntaxfehler führen würde. - Die
'
einfachen Anführungszeichen'
sind erforderlich, um zu verhindern, dass die Parametererweiterung sofort bei der Deklaration durchgeführt wird.