Ist STRG + C falsch, um zur Befehlszeile zurückzukehren?

27

Wenn ich verwende tail -fund zur Shell zurückkehren möchte, verwende ich immer CTRL+C. Oder wenn ich einen Befehl eingebe und Lust habe, ihn abzubrechen und von vorne zu beginnen, gehe ich einfach CTRL+Czu einer leeren Eingabeaufforderung zurück. Wird dies als schlechte Praxis angesehen? Ich habe manchmal das Gefühl, dass es einen besseren Weg gibt, sich von etwas zu lösen, aber ich habe wirklich keine Ahnung.

Setzen Sie Monica wieder ein
quelle
6
Um einen teilweise eingegebenen Shell-Befehl abzubrechen, können Sie Control-U oder Delete verwenden (abhängig von Ihren tty-Einstellungen und Tastenkombinationen), aber mit Control-C können Sie nichts falsch machen.
Keith Thompson
@ KeithThompson danke für die Strg + U, ich war mir dessen nicht bewusst :-)
Patrick
Für die Aufzeichnung wird Cu nicht wirklich aufheben der Befehl eingegeben, es verschiebt sie in den Paste - Puffer (ähnlich dem „cut“ Funktionalität einiger Programme).
Chris Down

Antworten:

36

Ctrl+ Csendet ein SIGINT an das Programm. Dies teilt dem Programm mit, dass Sie den Prozess unterbrechen (und beenden) möchten. Die meisten Programme fangen dies korrekt auf und beenden es sauber. Ja, das ist eine "richtige" Möglichkeit, die meisten Programme zu beenden.

Es gibt andere Tastenkombinationen zum Senden anderer Signale an Programme, dies ist jedoch die häufigste.

Chris S
quelle
9
Es gibt auch Strg + D für Programme, die Eingaben vom Benutzer lesen. Strg + D schließt STDIN mit dem Programm. Zum ordnungsgemäßen Verlassen der Shell ist dies ebenfalls verfügbar (genau wie beim Eingeben von exit).
Patrick
2
@Patrick Strg + D sendet tatsächlich eine Dateiendeanzeige an den Stream. Es liegt an dem Programm, angemessen zu reagieren (normalerweise wird der Dateistream geschlossen).
Chris S
Das ist es, was das Schließen von STDIN bewirkt. Sie können keine EOF erhalten, ohne dass die Pipe / der Stream geschlossen ist.
Patrick
9
In dreierlei Hinsicht falsch, Patrick. Erstens: Control + D hat diese Bedeutung nicht für Pipes. Zweitens: Der EOF-Sondercharakter schließt nichts. Dies führt zu einer einmaligen Rückgabe von Null Bytes (vorausgesetzt, der Zeilenpuffer ist leer) aus dem aktuellen read()Systemaufruf. Die nächsten read()s bleiben davon unberührt. Drittens: Nichts davon gilt für Programme, die die Zeilendisziplin in einen nicht-kanonischen Modus versetzen, wie die meisten Shell-Programme der letzten Jahrzehnte und in der Tat jedes andere Programm, das eine Bibliothek wie GNU verwendet readline.
JdeBP
13

Diese Methode ist wirklich in Ordnung.

Sven
quelle
11

Um einen langen Befehl während der Eingabe abzubrechen, springe ich manchmal zum Zeilenanfang und füge ein Kommentarzeichen ein, bevor ich die Eingabetaste drücke:

Home#Enter

Pos1#Return

Dies ist nützlich, wenn ich zum Beispiel einen Kopierbefehl mit einem langen Pfad eingegeben habe und in der Zwischenzeit feststelle, dass ich zuerst das Verzeichnis erstellen muss, aber den Befehl anschließend wiederholen möchte. Dann muss ich es nur noch aus dem Verlauf nehmen, den Hash löschen und ihn eingeben.

In Bash können Sie die Verknüpfung verwenden

Alt+#

um Ihren Befehl zu kommentieren, wie in den Kommentaren erwähnt (Danke, @Zorawar).

Benutzer unbekannt
quelle
6
Sie können es auch verwenden, Ctrl-Aohne die Finger von der Startreihe zu nehmen.
Dietrich Epp
1
Und Ctrl-Egeht übrigens bis zum Ende.
Dave
@ Dave: Das stimmt, aber Sie müssen nicht zum Ende gehen, um die Eingabetaste zu drücken und Ihren Befehl zu bestätigen. Die Befehlszeile ist kein Editor, in den möglicherweise eine neue Zeile eingefügt wird.
Benutzer unbekannt
2
In bash können Sie dasselbe erreichen, indem Sie einfach auf drücken Alt-#: Der Kommentar wird eingefügt und der Befehl ausgeführt (also in Ihren Verlauf aufgenommen).
Zorawar
8

Im Allgemeinen ist die Verwendung von Ctrl+ Cin Ordnung, wenn das Programm keine interaktive Möglichkeit zum Beenden bietet (entweder beabsichtigt oder häufiger, weil es eingefroren oder unbrauchbar geworden ist). Denken Sie daran, dass im interaktiven Modus die wirklich gewünschte Tastenkombination Ctrl+ sein kann D, die ein EOFSignal sendet , das das Ende der Eingabe signalisiert.

Zorawar
quelle
1

Wenn Sie Bash verwenden, können Sie auch Ctrl- Zund eingeben bg, um den aktuellen Job in den Hintergrund zu stellen.

Computist
quelle
0

Wie @Patrick im Kommentar zur akzeptierten Antwort sagte,

Es gibt auch Ctrl+DProgramme, die Eingaben vom Benutzer lesen. Ctrl+DSchließt STDIN mit dem Programm.

Dies half mir, wenn Ctrl+Ces nicht funktionierte, die Befehlszeile nach der Verwendung wieder herzustellen>>

enharmonisch
quelle