
Ich führe Befehle häufig mithilfe von 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 als Nächstes passieren wird.
Wie kann ich beispielsweise erreichen, dass die folgende Befehlszeile vor der Ausführung erweitert wird, sodass ich die Ergebnisse der Subshell bearbeiten kann?
z.B
$ find -name "test.txt"
/tmp/test.txt
$ mv $(!!) /tmp/new.txt
Ich würde gerne die Subshell erweitert sehenVorIch führe den Befehl wie folgt aus:
$ mv /tmp/test.txt /tmp/new.txt
Gibt es eine Möglichkeit, dies zu tun?
Antwort1
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 aktivieren globstar
, eingeben **/file.txt
und glob-complete-word
( \eg
) oder glob-expand-word
( \C-x*
) verwenden.
Antwort2
Hier ist ein praktischer Trick – fügen Sie diese Zeile zu ~/.inputrc hinzu (erstellen Sie die Datei bei Bedarf):
Strg-x: Shell-Zeile erweitern
Beachten Sie, dass Sie auch eine der folgenden Möglichkeiten haben, um nur den Verlauf oder Ihre Aliase oder beides zu erweitern:
Strg+x: Verlauf-Zeile erweitern
oder
Strg-x: Alias-Expand-Line
oder
Strg-x: Verlauf und Aliaszeile erweitern
Dies wurde gesammeltvon diesem Blog, Unddiese Frage auf SuperUser, das sehr ähnlich ist: