Unterschale erweitern, bevor sie ausgeführt wird?

11

Ich führe häufig Befehle mit Subshells aus und möchte manchmal, dass die Subshells erweitert werden, bevor ich etwas ausführe. Auf diese Weise kann ich überprüfen, was ich tue, und möglicherweise auch bearbeiten, was passieren wird.

Wie kann ich beispielsweise die folgende Befehlszeile erweitern, bevor ich sie ausführe, damit ich die Ergebnisse der Subshell bearbeiten kann?

z.B

$ find -name "test.txt" 
/tmp/test.txt

$ mv $(!!) /tmp/new.txt

Ich möchte, dass die Subshell erweitert wird, bevor ich den Befehl ausführe:

$ mv /tmp/test.txt /tmp/new.txt

Gibt es eine Möglichkeit, dies zu tun?

Brad Parks
quelle
1
zsh kann das, aber ich bin mir ziemlich sicher, dass Bash das nicht kann. Wenn Sie in zsh den Cursor auf den Parameter haben und TAB drücken, wird er erweitert
Patrick,
Ich habe seitdem zu gewechselt zshund es ist großartig und macht das, wie Sie vorschlagen ... netter Tipp! Ich werde die ursprüngliche Antwort hier lassen, da es eine bashFrage war.
Brad Parks

Antworten:

5

shell-expand-line( \e\C-e) erweitert Befehlsersetzungen in bash.

$ bind -p|grep shell-ex
"\e\C-e": shell-expand-line

$(!!)\e\C-e würde den vorherigen Befehl erneut ausführen und die Ausgabe einfügen:

"\eo": "$(!!)\e\C-e"

Es erweitert auch andere Befehlsersetzungen, aber es gibt keinen Befehl wie shell-expand-word.

In Bash 4.0 oder höher können Sie auch ( ) oder ( ) aktivieren globstar, eingeben **/file.txtund verwenden .glob-complete-word\egglob-expand-word\C-x*

Lri
quelle
2

Hier ist ein praktischer Trick: Fügen Sie diese Zeile zu ~ / .inputrc hinzu (erstellen Sie die Datei bei Bedarf):

Control-x: Shell-Erweiterungslinie

Beachten Sie, dass Sie auch eine der folgenden Optionen verwenden können, um nur den Verlauf oder Ihre Aliase oder beides zu erweitern:

Control-x: Verlaufserweiterungszeile

oder

Control-x: Alias-Expand-Zeile

oder

Control-x: Verlaufs- und Alias-Erweiterungszeile

Dies wurde aus diesem Blog und dieser Frage auf SuperUser entnommen , die sehr ähnlich ist:

Brad Parks
quelle