Kontext
Eingabe in Bash:gut
Wenn eine Bash-Shell beschäftigt ist (Initialisieren, Ausführen eines Befehls), kann man tippen, bevor die nächste Eingabeaufforderung erscheint .
Wenn die Shell ein Programm gestartet hat, erfasst dieses Programm die Tasten, aber wenn kein Programm ausgeführt wird oder wenn das Programm keine Eingaben erfasst, wird das, was man eingibt, in die Shell eingefügt, nachdem die Eingabeaufforderung angezeigt wird.
Beispiel:Geben Sie sleep 5
ein , drücken Sie die Eingabetaste und geben Sie dann ls
ein und drücken Sie die Eingabetaste. ls
wird ausgeführt, nachdem der Ruhezustand beendet ist. Im wirklichen Leben ls
würde durch cp
ersetzt werden , rsync
oder viele andere Programme.
Dies ist eine typische Tippfunktion und spart viel Zeit, wenn Sie im Voraus wissen, was Sie eingeben müssen.
Es ist auch sehr nett, da es erlaubt, mehrere Befehle zu kopieren und einzufügen und sie nacheinander auszuführen.
Zu den realen Anwendungsfällen gehört, dass die Shell Zeit zum Initialisieren benötigt. Es könnte sein, dass der Computer aus irgendeinem Grund langsamer ist oder die Shell auf einer langsamen Netzwerkverbindung ist usw.
Verlaufssuche in Bash:gut
An einer Bash-Eingabeaufforderung kann man Ctrl-R
eingeben um den Verlauf zu durchsuchen.
Dies ist eine unschätzbare Zeitersparnis, wenn Sie einige alte Befehlszeilen oder sogar eine Folge von Befehlszeilen wiederverwenden. Drücken Sie Ctrl-R
, geben Sie ein paar Zeichen ein, die für den Suchbefehl typisch sind, und drücken Sie Ctrl-O
so oft wie nötig, um die aufgezeichneten Befehle von dort abzuspielen.
Eingabe in der Verlaufssuche:wie ?
Es gibt jedoch eine Einschränkung. Oft verwende ich die obige Reihenfolge und finde das, wenn ich z.B. Ctrl-R ls
bevor der Shell-Prompt tatsächlich erschienen ist, das Ctrl-R
Teil wird ignoriert, aber der ls
Teil wird angezeigt.
Der Nettoeffekt ist, dass man warten muss, bis der Shell-Prompt erscheint, bevor man Ctrl-R
eingibt , wodurch ein Teil der eingesparten Zeit verloren geht.
Frage
Gibt es eine Möglichkeit, Ctrl-R
zu haben auch in einer Tippfehler-Situation geehrt ?
Akzeptierte Antwort:
Ihre Strg –r wird von der Kernel-basierten Terminal-Cookieed-Line-Processing-Engine abgefangen.
Während sleep
läuft, befindet sich das Terminal im Cooked-Modus, was bedeutet, dass der Kernel-basierte tty-Zeileneditor funktioniert. Der tty-Zeileneditor unterstützt eine rudimentäre Befehlszeilenbearbeitung. Die Löschtaste (normalerweise auf Strg gesetzt –h (Rücktaste) oder Entf ) und die Kill-Taste (normalerweise Strg-U ) sind die bekanntesten speziellen Bearbeitungstasten, die in diesem Modus verwendet werden können. Dieser Zeileneditor ist nützlich:Er ermöglicht es interaktiven Dienstprogrammen, die weder readline noch curses verwenden, vollständige Eingabezeilen vom Terminal zu lesen, während der Benutzer Eingabekorrekturen vornehmen kann.
Aber es gibt eine andere spezielle Taste, die in diesem Modus aktiv ist. Sie können es zusammen mit den anderen Schlüsseleinstellungen in der Ausgabe von stty -a
sehen unter dem Namen rprnt
und seine Standardeinstellung ist … Sie haben es erraten … Ctrl –r . Die Funktion dieser Taste besteht darin, die aktuelle Befehlszeile neu zu zeichnen, falls sie aufgrund anderer Terminalausgaben beschädigt oder falsch ausgerichtet wurde.
Um dies zu vermeiden, können Sie die Funktion mit stty rprnt undef
deaktivieren .
Persönlich bin ich an Strg gewöhnt –r als Repaint-Befehl interpretiert und ich bin jedes Mal überrascht, wenn ich das in bash
versuche und es macht etwas anderes!