Wie kann ich einen Befehl zum Bash-Verlauf hinzufügen, ohne ihn auszuführen?

32

Hin und wieder wäre es nützlich, einen Befehl direkt in den Verlauf von Bash einzufügen, ohne ihn tatsächlich auszuführen. Bisher habe ich festgestellt, dass das Geschlossene darin besteht, ein #davor einzufügen und die Return-Taste zu drücken. Gibt es bessere Wege?

Grumbel
quelle

Antworten:

39

history -s Befehl

Spiff
quelle
Ich wusste nie über diese Funktion Bescheid. Ich kann mir keine sofortige Verwendung vorstellen, aber es ist gut zu wissen.
Doug Harris
7
Wissen Sie, ob es möglich ist, einen ähnlichen Befehl wie diesen über ein Skript auszuführen? Ich habe ein Skript , ./resize-images.shdessen letzte Zeile gibt einen Befehl sollten Sie die Änderungen rückgängig machen , laufen, wäre es sehr nützlich sein , wenn stattdessen das Skript den Befehl zu meiner Geschichte hinzufügen könnte so schlug ich nur , up-enterwenn ich rückgängig machen musste
Bde Seite
1
@BenPage: Sehen Sie sich beide Antworten hier an: unix.stackexchange.com/questions/112354/… .
RustyTheBoyRobot
9

history -s Befehl

Sie können sogar einen Tastenanschlag drücken, um dies für Sie zu tun. Sie können dies an einer Bash-Eingabeaufforderung eingeben:

bind '"\C-q": "\C-a history -s \C-j"'

oder füge dies zu deinem hinzu ~/.inputrc:

"\C-q": "\C-a history -s \C-j"

Dann können Sie etwas eingeben und drücken Ctrl- qund es wird dem Verlauf hinzugefügt, ohne dass es ausgeführt wird. Das Leerzeichen vor "history" bewirkt, dass der historyBefehl selbst nicht zum Verlauf hinzugefügt wird, wenn Ihre HISTCONTROLVariable ignorespaceor enthält ignoreboth. Anstelle von "\ Cq" könnte ein anderer Tastenanschlag gewählt werden.

Bis auf weiteres angehalten.
quelle
3

Es ist schwer, etwas zu finden, das kürzer ist als ein "Befehl" mit einem Zeichen, daher müssen wir wirklich zur Tastenanschlagebene gehen. Mit meinem Bash-Setup und einer US-Tastatur erledigen Sie Folgendes:

  1. Zum Anfang der Zeile gehen CTRLA:: +1 Anweisung, +2 Tastendruck
  2. Hinzufügen #(benötigt SHIFT): +1 Anweisung, +2 Tastendruck
  3. Fügen Sie es der Historie hinzu mit ENTER: +1 Anweisung, +1 Tastendruck

also insgesamt 3 anweisungen, 5 tastendrücke.

Die Verwendung von ALT#bewirkt dasselbe in 1 Anweisung und 2 Tastendrücken.

YMMV abhängig von Ihrem Tastaturlayout und Ihrer Bash-Konfiguration.

Benjamin Bannier
quelle
3
Das Problem ist nicht die Anzahl der Tastendrücke, sondern, dass "#Befehl" in der Historie statt des beabsichtigten "Befehls" gespeichert wird.
Grumbel
1
Es ist schön, dass "#command" in der Verlaufsdatei gespeichert wird, da Sie wissen, dass der Befehl nicht tatsächlich ausgeführt wurde. Dies kann hilfreich sein, wenn Sie später überprüfen möchten, welche Befehle Sie eingegeben haben, um ein Problem zu ermitteln.
Marnix A. van Ammers
2
@Grumbel, @Marnix: Einverstanden, ich habe die Frage auf den Brief nicht beantwortet, sondern gezeigt, wie man das, was er macht, jetzt noch schneller macht. Persönlich denke ich, dass die Verwendung #commandviel schneller als history -s commandund auch sehr einfach ist, wenn Sie history-search-backward/-forwardrichtig abbilden . Aber es ist Geschmackssache.
Benjamin Bannier