Kann ich den Alias ​​`! verwenden?` in bashrc?

Kann ich den Alias ​​`! verwenden?` in bashrc?

Ich verwende Emacs als Editor in der Befehlszeile (mit dem Alias alias em='emacs -nw'​​) und möchte einen Alias ​​für erstellen können, um !emdie zuletzt in Emacs geöffnete Datei zu öffnen.

Ich habe alias e='!em', alias e='${!}em', alias e='${!em}', ausprobiert, konnte bisher aber nichts finden, was funktioniert.

Ich habe einige verwandte Beiträge zum Thema Aliasing gefunden !!:

Alias ​​für einen Befehl mit !! zum Abrufen des letzten Befehls

Antwort1

Ich glaube nicht, dass die Verlaufserweiterung nach der Erweiterung der Aliase abgeschlossen ist. Sie müssen history -pdies daher explizit tun:

alias e='eval "$(history -p !em)"'

Allerdings funktioniert das in diesem Fall auch nicht, da Aliase nach der Befehlsersetzung nicht erweitert werden. Aber Funktionen funktionieren, also sollten diese beiden es tun:

em() { emacs -nw "$@"; }
e() { eval "$(history -p !em)"; }

Bei Letzterem könnte es sich um einen Alias ​​handeln.

Antwort2

Wenn Sie „em“ wie beschrieben als Alias ​​verwenden, sollten Sie nicht versuchen, einen weiteren Alias ​​für „!em“ zu erstellen. „!“ ruft den Shell-Verlaufsmechanismus auf, sodass der Befehl „!em“ die letzte Verwendung Ihres Alias ​​wiederholt (was jedoch nicht unbedingt die letzte von Emacs bearbeitete Datei sein muss).

verwandte Informationen