Ich finde mich häufig in diesem Szenario wieder. Ich bin mitten in der Eingabe eines Befehls und muss noch etwas überprüfen, bevor ich ihn abschließe.
Gibt es eine Möglichkeit, eine Subshell zu öffnen, bei der meine aktuellen Eingaben bisher gespeichert wurden? Wenn ich diese Subshell beende, bin ich wieder da, wo ich war.
$ mylongcommand -n -e <SOME KEY COMBINATION WHICH OPENS A SUBSHELL>
$ date
...
$ exit
$ mylongcommand -n -e <BACK TO WHERE I WAS>
Ich benutze zsh
command-line
zsh
Panayiotis
quelle
quelle
screen
oder verwendentmux
, um mehrere virtuelle Terminals auf der Konsole abzurufen.Antworten:
Es gibt die Tastenkombination, EscQdie den Befehlspuffer speichert und die Eingabe eines neuen Befehls ermöglicht. Nach dem Ausführen des Befehls enthält der Puffer das, was Sie zuvor eingegeben haben. Wenn Sie einen anderen Befehl ausführen müssen, bevor Sie dies beenden, können Sie ihn EscQerneut eingeben.
(Ich habe noch nicht versucht, eine Subshell zu öffnen, nachdem ich gedrückt EscQhabe.)
Siehe http://zsh.sourceforge.net/Intro/intro_10.html und suche nach "esc-q"
quelle
Normalerweise verwende ich Ctrl+, Uwodurch die aktuelle Zeile gelöscht und in einem Puffer gespeichert wird. Von dort aus mache ich, was immer ich vor dem brauchte
mylongcommand
. Wenn ich fertig bin, benutze ich Ctrl+ Y,mylongcommand
um meine Eingabeaufforderung wieder einzufügen.Denken Sie an einen halb getippten Befehl, während ich etwas überprüfe
quelle
Meine Lösung ist ausgesprochen Low-Tech und klobig, sondern stützt sich auf Schlüssel-Sequenzen sind Sie wahrscheinlich bereits vertraut mit: Hit Ctrl+ A, dann #, dann ENTER.
Dies hat zur Folge, dass
#
am Anfang der Zeile ein eingefügt wird, so dass daraus ein Kommentar wird, der dann ausgeführt und in den Befehlsverlauf verschoben wird. Sie können dann Ihren Hilfsbefehl eingeben, durch den Befehlsverlauf zum kommentierten Befehl blättern, den Befehl entfernen#
und den Befehl nach Bedarf ausführen.quelle
Ich gebe Ctrl+ ein Z, um den Befehl, den ich eingebe, auszusetzen, und gebe einen anderen Befehl ein. Nachdem ich diesen Befehl ausgeführt habe (oder ihn mit Ctrl+ abgebrochen habe C), wird der angehaltene Befehl zur Bearbeitung zurückgegeben (auch wenn ich mich an die Cursorposition erinnere). Wenn die Befehlszeile bei der Eingabe von Ctrl+ leer ist Z, ruft die Taste
bg
stattdessen die integrierte Funktion auf (ein doppeltes Ctrl+ Zsendet also einen ausgeführten Befehl direkt in den Hintergrund).(Früher veröffentlicht unter Remember a half-typed command, während ich etwas überprüfe, das hauptsächlich Lösungen für Bash enthält, bei denen Sie nichts so Bequemes tun können. Dies ist eine etwas schickere Version der eingebauten Bindung von
M-q
topush-line
.)Dies führt keine Subshell aus: Der Befehl, den Sie eingeben, nachdem Sie die vorherige "angehalten" haben, wird in derselben Shell ausgeführt. Auf diese Weise können Sie beispielsweise das aktuelle Verzeichnis ändern, wenn Sie nach der Eingabe eines Befehls feststellen, dass Sie es in einem anderen Verzeichnis ausführen möchten. Wenn Sie eine neue Shell-Instanz ausführen möchten, können Sie diese
zsh
über eine Schlüsselbindung ausführen , aber ich halte das nicht für besonders nützlich.quelle