Teilen Sie eine vorhandene Eingabeaufforderungsbefehlszeile in einige Zeilen auf

8

Ich verstehe, dass ich \ enteram Ende einer bashBefehlszeile eingeben kann, um diesen Befehl in einer anderen Zeile fortzusetzen. Aber wie kann ich eine Eingabeaufforderungsbefehlszeile - die bereits vollständig eingegeben wurde - in zwei Teile teilen ?

Wie kann ich beispielsweise diese Zeile kurz zuvor thenunterbrechen, ohne den Rest abschneiden und erneut eingeben zu müssen?

$ if true; then ls; fi
nr
quelle
1
Wenn Sie sich an einer interaktiven Eingabeaufforderung befinden, gibt es einen bestimmten Grund, warum Sie dies tun müssen, außer dass Ihr Shell-Verlauf schöner aussieht? Funktionell machen zusätzliche Zeilenumbrüche keinen Unterschied für die Shell. Wenn Sie ein langes komplexes Shell-Snippet eingeben, verwenden Sie am besten einen Editor. Schauen Sie sich auch den fcBefehl an - er ist in fast allen Shells verfügbar.
jw013
Nicht schöner, sondern nur, um komplexe Befehle lesbar zu machen.
Nr.

Antworten:

4

Ein Zeilenumbruchzeichen ist LF (Zeilenvorschub), auch bekannt als Control-J. Wenn Sie Ctrl+ drücken J, wird der Befehl accept-linewie bei der ReturnTaste ausgeführt. Um ein Literal-LF-Zeichen einzufügen, drücken Sie Ctrl+ V Ctrl+ J. Der Befehl Ctrl+ V( quoted-insert) fügt das nächste Zeichen buchstäblich ein. Um eine Zeile zu teilen, können Sie \ Ctrl+ eingeben V.

Wenn Sie dies häufig tun, können Sie daraus ein Makro machen:

bind '"\e\C-j": "\\\C-v\C-j\C-b\C-b"'
Gilles 'SO - hör auf böse zu sein'
quelle
6

Sie können den aktuellen Befehl in einem Editor verwenden edit-and-execute-command, der normalerweise Ctrl+ x+ zugeordnet eist . Beim Verlassen des Editors wird der Befehl ausgeführt.

l0b0
quelle
1
Schön - wusste das nie. Sie müssen sicherstellen, dass Ihre $ EDITOR-Umgebungsvariable auf etwas gesetzt ist - ich vimhabe meine wie folgt hinzugefügt : export EDITOR=vim.
slm
1
Wie kann ich die Ausführung des Befehls beim Beenden des Editors abbrechen? Ich benutze :q!oder ZQaber ohne Erfolg.
Birei
1
@Birei: Löschen Sie alle Zeilen, speichern Sie sie und beenden Sie sie (z. B. ggdG:wqoder :%d|wqusw.). Der Befehl bleibt im Verlauf (möglicherweise als Duplikat, wenn Sie ihn von einem früheren Eintrag abgerufen haben), wird jedoch nicht ausgeführt.
Bis auf weiteres angehalten.
@ TennisWilliamson: Wow !! Fast drei Jahre später hatte ich dieses Problem noch nicht gelöst, vielen Dank, weil die Lösung so einfach war und Einfachheit immer besser ist.
Birei
2

Hinweis - Diese Antwort ist spezifisch für vi und vim

set -o vi    # edit commands using vi
VISUAL=/usr/bin/vim

Um die aktuell eingegebene Zeile zu bearbeiten, drücken Sie ESC(um in den Befehls- vioder vimBefehlsmodus zu gelangen ) und geben Sie dann voder ein vi.

Beachten Sie, dass alle vi / vim-Bearbeitungsbefehle funktionieren. z.B

  • ESC+ A setzt an das Ende der aktuell eingegebenen Zeile.
  • ESC+ 0 setzt den Cursor an den Zeilenanfang.
Verdächtiger
quelle
Ausgezeichnet. Dies erleichtert das Bearbeiten von Befehlszeilen auf jeden Fall erheblich. Aber wissen Sie, wie Sie ein neues Zeilenzeichen einfügen können, ohne in den visuellen Modus zu wechseln?
Nr.
2
Vielen Dank. CTRL+ vdann CTRL+ jsollte es funktionieren, eine neue Zeile zu werfen.
Verdächtiger