Entschuldigung, dieser Titel ist nicht der eleganteste, den ich je erfunden habe.
Aber ich gehe davon aus, dass sich viele Leute darüber Gedanken gemacht haben, und meine Frage könnte ein Betrug sein ... alles, was ich sagen kann, ist, dass ich es nicht gefunden habe.
Wenn ich "Scrollen" nach oben sage, meine ich die Verwendung der "Pfeil nach oben" -Taste auf der Tastatur, die Sie offensichtlich beginnend mit dem letzten Befehl durch den Verlauf nach oben führt.
Sie finden also einen Befehl, vielleicht 30 Befehle zurück ... und führen ihn aus. Und dann wollen Sie den Befehl ausführen, der ursprünglich danach kam ... gibt es eine schnelle Möglichkeit, dies zu tun? Oder wie machen das die, die BASH fließend beherrschen?
quelle
vi
Zeilenbearbeitung (aktiviert mitset -o vi
) oderemacs
? DennCtrl-O
soweit ich das beurteilen kann, wird das mit ersteren nicht funktionieren.bind "\C-o":operate-and-get-next
(oder alles abgebenbind
zu~/.inputrc
)Die Antwort von Jon Reinhold ist großartig, aber es gibt eine viel leistungsfähigere Lösung, die ich vorschlagen werde. Ich habe auch einen Kommentar zu einem GOTCHA in Jons Antwort, aber ich habe nicht genug Ruf, um direkt einen Kommentar abgeben zu können. @Jon Reinhold, wenn Sie dies lesen, richten Sie bitte meinen Kommentar an Sie unten.
Bash enthält einen Befehl
fc
, der die Zeilennummern der Bash-Verlaufsliste als Parameter verwendet. Anschließend wird Ihr Standardeditor mit diesen Zeilen als Text geöffnet. An diesem Punkt können Sie die Linien optional bearbeiten. Wenn Sie dann den Editor verlassen, führt bash diese Zeilen aus!Ein Beispiel für eine Änderung, die Sie möglicherweise vornehmen möchten, ist das Anhängen an alle Zeilen außer der letzten, etwa "; read -p" next ... ". Dadurch wird jede Zeile von bash ausgeführt, und Sie werden aufgefordert, fortzufahren.
Kommentar für Jon Reinhold: Großartige Antwort, aber Sie sollten sie einschränken, denn wenn der Benutzer die Bash-Variable HISTCONTROL so eingestellt hat, dass sie einschließt
erasedups
, istC-o
der Benutzer nach der Ausführung verwirrt, da anstelle des erwarteten nächsten Befehls im Verlauf der nächste angezeigt wird wird Angezeigt werden. Dies liegt daran, dass bash die ursprüngliche Instanz des ausgeführten Befehls gelöscht hat und somit alle Befehle danach eine Zeile nach oben verschoben haben, d. H. auf eine niedrigere Indexnummer in der Verlaufsliste.quelle
fc
sowohl vorCtl-o
als auch vor sichbash
selbst vor. (Im Gegensatz zu dieser Antwort ist es auch weniger nützlich.)erasedups
ist eindeutig ein Bash-Bug (es hätte Vorkehrungen für diese Situation geben können). Gut zu wissen.Eine weitere Möglichkeit , Ihr gewünschtes Verhalten zu erreichen wäre vertraut zu machen mit den bash Readline- Verknüpfungen (davon CTRL- oist ein glaube ich) und bash Geschichte Sucht.
Verlaufssuche
CTRL- rführt Sie zur Suche im Bash-Befehlsverlauf, wo Sie mit der Eingabe des gesuchten Befehls beginnen können und Bash den Befehl automatisch für Sie vervollständigt. Die Autocomplete-Funktionalität ist wirklich ziemlich gut. Befindet sich der auszuführende Befehl in der Eingabezeile, können Sie ENTERden Befehl ausführen oderCTRL - drücken e, um den Cursor an das Ende der Befehlszeile zu bewegen und den Verlaufssuchmodus zu beenden.
Die kühle Sache mit CTRL- ean diesem Punkt ist , dass die Geschichte Puffer kontextuell auf diesen Befehl gesetzt. Der nächste und der vorherige Befehl werden jetzt vor und nach der Zeile ausgeführt, in der die Verlaufssuche nach Ihnen gesucht hat. Sie können die Aufwärts- oder Abwärtspfeile drücken und den nächsten Befehl ausführen.
Die Verlaufssuche ist sehr leistungsfähig und bietet eine hervorragende Möglichkeit, die Verwendung des Aufwärtspfeils zu vermeiden, um überhaupt zum Befehl zurückzukehren. Eine schnelle Verlaufssuche kann viel Zeit beim manuellen Durchsuchen des Verlaufs sparen, und dann können Sie fortfahren CTRL- owie Jon oben ausgeführt hat.
Readline Short Cuts
Wenn Sie Ihr Bash-Fu verbessern möchten, würde ich empfehlen, die Readline-Shortcuts für die Pfeiltasten zu verwenden. Sie werden vielleicht feststellen, dass sie bequemer sind und es Ihnen ermöglichen, Ihre Schreibgeschwindigkeit zu erhöhen, aber natürlich YMMV. Hier sind ein paar mehr:
Diese Readline-Verknüpfungen (zusammen mit CTRL- aZeilenanfang und CTRL- eZeilenende) erhöhen Ihre Geschwindigkeit und Effizienz in der Befehlszeile imo.
quelle