Angenommen, ich möchte eine Folge von vier Befehlen ausführen, die ich zuvor ausgeführt habe. Wenn der erste 432 im Befehlsverlauf ist, könnte ich Folgendes tun:
$ !432; !433; !434; !435
Ich bin gespannt, gibt es einen effizienteren Weg, um dies zu erreichen?
bash
command-line
command-history
Eric Wilson
quelle
quelle
history -p \!43{2..5}
die Befehle 432 bis 435 an das Terminal senden, um sie anschließend zu kopieren / einfügen.Antworten:
Wenn es sich auf Befehle bezieht, die erst kürzlich ausgeführt wurden, besteht eine effizientere Möglichkeit darin, sie mit negativen Zahlen zu referenzieren:
Sobald Sie dies getan haben, enthält Ihr letzter Verlaufseintrag auch die gesamte Befehlskette, sodass Sie ihn mit wiederholen können
!!
.Edit: Wenn Sie nicht bereits haben, machen Sie sich mit der großen eingebauten Funktion
fc
, durch Gilles erwähnt . (Verwendunghelp fc
.) Es stellt sich heraus, dass Sie auch negative Zahlen verwenden können, sodass Sie dasselbe wie oben mit tun könnenDies hat jedoch eine Einschränkung: Danach wird die
eval
Zeile als letzter Befehl in der Historie gespeichert. Wenn Sie dies erneut ausführen, geraten Sie in eine Schleife!Um dies sicherer zu machen, verwenden Sie den Standard-
fc
Betriebsmodus: leiten Sie den ausgewählten Befehlsbereich an einen Editor weiter und führen Sie ihn aus, sobald Sie ihn verlassen. Versuchen:Sie können die Reihenfolge der Befehle sogar umkehren:
fc -1 -4
quelle
Verwenden Sie den integrierten
fc
Befehl, um eine Reihe von Befehlen im Verlauf anzuzeigen :Um sie erneut auszuführen:
quelle
man fc
gibst du mir nichts? Was bedeutetfc
stehen? Welche anderen Möglichkeiten gibt es?help fc
... und auchhelp help
.... help: help [-dms] [pattern ...] Zeigt Informationen zu eingebauten Befehlen an.-l
Flag wird es ausgeführt, ohne das Böse zu braucheneval
.fc
"find command" oder "fix command" steht.Es gibt eine nette und alternative Möglichkeit, eine Reihe von Befehlen nacheinander aus dem Bash-Verlauf auszuführen:
Anstatt den Verlauf als Ersatz (
!432
oder!-4
) zu verwenden, können Sie den Verlauf mit Ctrl+ durchsuchen rund sobald Sie den ersten gewünschten Befehl gefunden haben Führen Sie aus, drücken Sie Ctrl+ o( Operate-and-Get-Next ) anstelle der returnTaste.Dadurch wird der Befehl gestartet und der nächste Befehl aus dem Verlauf vorgeschlagen. Sie können Ctrl+oso oft drücken, wie Sie möchten, und die Sequenz entweder mit returnfür eine letzte Ctrl+cbeenden oder anhalten, ohne sie zu starten.
quelle
Ctrl-o
wird nur ein Literal ausgegeben^o
und mein Wort gebrochen(reverse-i-search)
. Vielleicht gibt es eine andere Einstellung.Um die Befehle sofort auszuführen, anstatt sie zu bearbeiten, ist hier eine syntaktisch schlankere Version von Giles answer using eval :
Das Doppelpunktargument für -e ist der Bash-Noop, der bewirkt, dass der von fc gewünschte Schritt "In einem Editor öffnen" übersprungen wird. Außerdem enthält der (aktuelle) Verlauf jetzt die tatsächlichen Befehle aus dem Verlauf und nicht mehr die eval-Anweisung.
quelle
fc
für Schleife undxsel
Dies funktioniert gut, wenn ich die letzten n Befehle mehrmals verketten und erneut ausführen möchte:
Dann:
Oder für größere Befehle, die möglicherweise bearbeitet werden müssen:
quelle