Wie löscht man in bash die aktuelle Eingabe?

172

Angenommen, Sie beginnen in bash mit dem Schreiben eines Befehls wie:

$ rm -rf /foo/bar/really/long/path/here

und dann merke, dass du das doch nicht ausführen willst. Gibt es eine Möglichkeit, die Eingabe mit ein oder zwei Tastenanschlägen zu löschen?

Was ich in letzter Zeit gemacht habe, ist das Echo voranzustellen und die Eingabe in Anführungszeichen (Strg + A ,, echo "Strg + E, ") zu setzen und dann die Eingabetaste zu drücken . Gibt es einen schnelleren Weg?

user85509
quelle
Oder nehmen Sie an, Sie fügen einen Befehl ein und stellen fest, dass es sich um den falschen Einzeiler handelt. Die Rücktaste wird nach ungefähr 20 Zeichen wirklich alt!
bgStack15
<kbd> Strg </ kbd> - <kbd> C </ kbd>, wenn Sie den Verlauf behalten möchten, lesen Sie stackoverflow.com/a/9679852/6521116
Kris Roofe

Antworten:

286
  1. Drücken Sie Ctrl- U, um alles vor dem Cursor zu löschen. Der gelöschte Befehl wird in einem Puffer gespeichert. Drücken Sie Ctrl-, Yum den gelöschten Befehl einzufügen.

    (Optional: Drücken Sie Endoder Ctrl- E, um zuerst zum Ende der Eingabe zu springen.)

  2. Alternativ drücken Ctrl- Cabzubrechen , was Sie schreiben.

John Kugelman
quelle
28
Es gibt eine Einschränkung: Strg-C beendet die aktuelle Eingabeaufforderung, startet eine neue Eingabeaufforderung und setzt den Rückkehrcode auf 1.
user716468
14
Gewöhne dich nicht daran, benutze Strg-U. Strg-C ist in Bash nicht so schlecht, aber wenn Sie zB eine MySQL-Client-Eingabeaufforderung haben, wird Strg-C die Verbindung zum Server trennen, was wirklich ärgerlich ist.
Christian
1
Beachten Sie, dass es auf vielen Systemen auch ein Terminal-Kill-Zeichen gibt, das die Eingabe bisher beendet. Oft ist das Control-X. Sie können mit überprüfen stty -a. Und das funktioniert mit jedem Programm, das die Terminalsteuerungen nicht aktiv ändert.
Jonathan Leffler
Strg-A gefolgt von Strg-K funktioniert ebenfalls. Der 'getötete' Text wird gespeichert und Sie können ihn mit Strg-Y einfügen. Diese Tastenanschläge stammen tatsächlich aus der Lesezeilenbibliothek : cnswww.cns.cwru.edu/php/chet/readline/rluserman.html .. Sie können sie also in jedem Tool finden, dessen Benutzeroberfläche die Bibliothek verwendet (Actually Emacs, bash, etc..). Sie können das Verhalten anpassen, indem Sie die .inputrc-Datei bearbeiten (weitere Informationen finden Sie unter dem obigen Link).
Rkachach
93

Versuchen Sie Ctrl+ U. Das löscht die Eingabezeile.

gbarry
quelle
7
Danke, ich hätte das fast als Antwort akzeptiert. Aber ich fand, dass es nur die Eingabe vor dem Cursor löscht. In einigen Fällen bin ich gerade dabei, den Befehl zu bearbeiten, daher würde ich mich lieber an Strg + C anstatt an Strg + U erinnern, als einfach "die aktuelle Eingabe verwerfen".
user85509
21

Ctrl- U, Ctrl- Kmacht den Trick auch.

Ctrl- Ulöscht alles vom Zeilenanfang bis zum Cursor, Ctrl- Klöscht alles vom Cursor bis zum Zeilenende. (Es ist manchmal nützlich, nur einen von ihnen zu verwenden.)

rur
quelle
13

Hierfür gibt es zwei Möglichkeiten

ctrl+ c- Dies löscht die gesamte Zeile, unabhängig davon, wo sich der Cursor befindet.

ctrl+ u- Dies löscht die Linie von der Position des Cursors bis zum Anfang.

vks
quelle
2
"Bedenken Sie, dass die Verwendung von Cu (oder Ce und dann Cu) das, was Sie löschen, in einem Puffer speichert, damit Sie es später mit Cy einfügen können." Markisisme ein einfacher Einzelbefehl ist Strg + _. stackoverflow.com/questions/1056440/… beantwortet von john kug - gerade gestartet stackoverflow hat nicht genug Punkte, um Ihrer Antwort einen Kommentar hinzuzufügen.
vks
9

Eine schöne Verknüpfung drückt Esc#. Es wird ein #Zeichen vorangestellt (wodurch die Zeile zu einem Kommentar wird) und dann die Eingabetaste gedrückt. Wenn Sie dann entscheiden, dass Sie den Befehl noch benötigen, haben Sie ihn immer noch in Ihrer Geschichte :)

stricken
quelle
3
In den meisten Terminals ist dies auch dasselbe wie Alt + #, wodurch es zu einem (akkordierten) Tastenanschlag wird.
Dolda2000
Eine einfache, aber clevere Lösung, und ich denke, dies ist eine benutzerfreundlichere Möglichkeit, einen Befehl abzubrechen. Genau das, wonach ich gesucht habe :)
Cas
9

Durch Drücken von EscPlus Backspacein Bash wird alles bis zur Position des Cursors gelöscht.

(In Cygwin wird dadurch die Eingabe bis zum nächsten Wort gelöscht. Wörter werden durch Leerzeichen, Unterstriche usw. getrennt.)

Nippey
quelle
3

Beachten Sie, dass mit Ctrl- U(oder Ctrl- Eund dann Ctrl- U) das, was Sie löschen, in einem Puffer gespeichert wird, damit Sie es später mit Ctrl- einfügen können Y.

Gonkalotome
quelle
3

Wenn Sie Bash im vi-Modus verwenden (einstellen mit set -o vi), drücken Sie Esc, um in den normalen Modus von vi zu wechseln, und geben Sie ein dd, um die aktuelle Zeile zu löschen!

Helmyano
quelle
3

Dies ist eine Erweiterung von Knittls Antwort , bei der die Zeile im Konsolenverlauf durch Präfixieren eines Hash gespeichert wird . Überwindung von Nachteilen der Zwischenablage, z. B. versehentliches Überschreiben oder Unfähigkeit, die Schnittlinie als Referenz anzuzeigen.

Kommentarzeile & Neue Eingabeaufforderung zurücksenden

Verwenden Sie eine der Tastenkombinationen:

  • Esc,#
  • Alt+#

#Der Zeile wird ein Hash-Zeichen vorangestellt, wodurch die gesamte Zeile in einen Kommentar umgewandelt wird. Es wird auch eine neue Eingabeaufforderung zurückgegeben, als ob der Benutzer die Eingabetaste gedrückt hätte. z.B

$ #rm -rf /foo/bar/really/long/path/here
$

Kommentierte Zeile abrufen

Verwenden Sie eine der folgenden Verknüpfungen, um die alte Zeile aus dem Konsolenverlauf wiederherzustellen:

  • Up
  • Ctrl+p

Wiederholen Sie die Tastenkombination, bis die gewünschte Zeile angezeigt wird.


Schnelle Entfernung des Hash-Präfixes

Um das Hash- #Präfix der Zeile zu entfernen, stehen verschiedene Optionen zur Verfügung:

Entfernen Sie das erste Zeichen und führen Sie sofort den Befehl aus:

  • Esc, 1, Esc,#
  • Alt+ -, Alt+#

Bewegen Sie den Cursor, um das erste Zeichen zu starten und zu entfernen, ohne den Befehl auszuführen:

  • Home, Delete
  • Ctrl+ a, Ctrl+d
Cas
quelle
2

Versuchen Sie Folgendes, um die aktuelle Zeile zu löschen:

Ctrl- X, Ctrl-U

Alternativ können Sie Folgendes verwenden:

Esc- -D

was erfordert in ~ / .inputrc:

"\ed": kill-whole-line 

Siehe: http://codesnippets.joyent.com/posts/show/1690

Gonkalotome
quelle
Wenn Sie möchten, dass nur die Escape-Taste die gesamte Zeile "\e\e": kill-whole-line
löscht