Bash führt nach der Aliaserweiterung keine Verlaufserweiterung durch, daher müssen Sie dies explizit verwenden history
, wie in Bash History Builtins dokumentiert und im Folgenden beschrieben.
history -ps args
-p
Führen Sie die Ersetzung der Historie in den Argumenten durch und zeigen Sie das Ergebnis in der Standardausgabe an, ohne die Ergebnisse in der Historienliste zu speichern.-s
Die Argumente werden als einzelner Eintrag am Ende der Verlaufsliste hinzugefügt.
Ein Alias von alias fixsha='vim $(history -p !$)/SHA1SUM'
funktioniert meistens, aber nicht wie beabsichtigt, wenn er !$
auf einen Pfad erweitert wird, der Leerzeichen enthält. Durch das Hinzufügen von Anführungszeichen um das Pfadargument werden alle Leerzeichen und Leerzeichen geschützt und die Ergebnisse werden vim "/foo/bar\ baz/SHA1SUM"
eher als gewünscht vim /foo/bar\ baz/SHA1SUM
oder gleichwertig dargestellt vim "/foo/bar baz/SHA1SUM"
.
Neben der expliziten Historienerweiterung eval
ist es daher auch notwendig, eine Notierungsebene aufzuheben.
alias fixsha='eval vim "$(history -p !$)/SHA1SUM"'
Hinweis: Sie werden überrascht sein zu erfahren, dass die Anführungszeichen in der obigen Aliasdefinition nicht erforderlich sind. Dies liegt daran, dass kein Leerzeichen zwischen dem erweiterten Wert von !$
und /SHA1SUM
der Wortteilung von Bash ist. Ich mag es jedoch, dass sie da sind, um die Absicht zu betonen, dass sie sich zu einem einzigen Argument ausdehnt.