GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie lässt sich Type-Ahead auf die Bash-Verlaufssuche anwenden (Strg-R)?

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 Strgr 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.

Verwandte:Wie durchsucht man eine MySQL-Datenbank mit verschlüsselten Feldern?

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 … Ctrlr . 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!


Linux
  1. So löschen Sie den Bash-Verlauf unter Linux

  2. So löschen Sie einen bestimmten Befehl aus dem Bash-Verlauf in Linux

  3. CentOS / RHEL :So deaktivieren Sie den BASH-Shell-Verlauf

  4. Gewusst wie:Unbegrenzter Bash/Shell-Verlauf?

  5. Wie führe ich einen Befehl mehrmals mit der Bash-Shell aus?

McFly – Ein Ersatz für die „Strg+R“-Bash-Verlaufssuchfunktion

So zeigen Sie den Bash-Verlauf ohne Zeilennummern an

So aktivieren Sie den Zeitstempel im Bash-Verlauf unter Linux

So verwenden Sie den Declare-Befehl in der Linux Bash Shell

Verwendung der Verlaufsfunktion in Bash Shell auf Ubuntu 16.04 LTS-Server

Wie führe ich einen Befehl in einem Shell-Skript aus?