Speichern Sie den Befehl im Verlauf, ohne ihn in Bash auszuführen

8

Gibt es eine Möglichkeit, einen Befehl im Bash-Verlauf zu speichern, ohne ihn auszuführen? z.B

$ cmd [a long list of arguments] 

und jetzt erinnere ich mich, dass ich beim Tippen zuerst etwas anderes machen möchte. Kann ich so etwas haben?

$ cmd [a long list of arguments][some-key-strokes]

und dies wird nicht ausgeführt, sondern geht in die Bash-Geschichte, damit ich es später verwenden kann?


quelle
5
In dieser Situation stelle ich der Zeile einfach ein Präfix voran #und drücke dann die Eingabetaste.
Oliver Charlesworth

Antworten:

5

Es gibt vielleicht einen besseren Weg, aber Sie können den :pModifikator der Verlaufserweiterung verwenden , um die aktuelle Kommentarzeile zu drucken, ohne sie auszuführen. !#ist die aktuelle Zeile und %wird an sich nichts entsprechen

$ cmd [arguments] !#%:p
Explosionspillen
quelle
cool! ;) und ohne spezielle Zeichen im Befehl zu entkommen, was kann chaotisch werden, wenn der Befehl nicht nur ls -al+1
cool! sehr ordentlich
8

Verwenden Sie die -sOption für den historyBefehl:

history -s cmd arg1 arg2

Der Aufruf an sich history -sselbst wird bequemerweise nicht zum Befehlsverlauf hinzugefügt, sodass es in Ihrem Verlauf so aussieht, als hätten Sie ihn ausgeführt, cmdohne dies tatsächlich zu tun.

chepner
quelle
cool! das ist auch
1

Normalerweise wird dies von erledigt

echo 'cmd [a long list of arguments]' >> /home/you/bash_history

Beachten Sie, dass der Name des Verlaufs auf Ihrem System unterschiedlich sein kann. Daher können Sie die HISTFILEUmgebung var verwenden

was macht:

echo 'cmd [a long list of arguments]' >> "$HISTFILE"
hek2mgl
quelle
1

Normalerweise füge ich einfach ein # am Anfang der Zeile hinzu, um die Zeile in einen Kommentar umzuwandeln:

#cmd [a long list of arguments] 

Ich bevorzuge diesen Weg, weil Sie es mit nur 3 [4 tun können, wenn Sie SHIFT benötigen, um #] Tastatureingaben einzufügen

^a#<ENTER>

^ a geht zum Anfang der aktuellen Zeile

# fügt den Kommentar hinzu

ENTER führt den Kommentar aus

user3726536
quelle
0

In dieser Situation stelle ich der Zeile einfach # voran und drücke dann die Eingabetaste.

... oder verwenden Sie die Tastenkombination: ESC #

bind -p | grep -i 'insert-comment'   # "\e#": insert-comment

Siehe auch: Bash - Befehl speichern, ohne ihn auszuführen


quelle
0

Sie können versuchen, ein Leerzeichen und | hinzuzufügen (Pipe) am Ende der Zeile, drücken Sie die Eingabetaste und dann Strg-C'ing.

( Space, |, Enter, Ctrl+ C)

Der Befehl wird in Ihrem Verlauf mit einem | angezeigt am Ende (kann einfach mit der Rücktaste entfernt werden) anstelle eines # am Anfang (möglicherweise mühsamer zu entfernen).

HAFTUNGSAUSSCHLUSS: Ich weiß nicht, ob das immer funktioniert! Benutzung auf eigene Gefahr!

$ cmd [lange Argumentliste] |

> Ctrl+C

$ Up

$ cmd [lange Argumentliste] |

Josiah Krutz
quelle
0

Sie könnten versuchen, diese Zeile zu verwenden:

history -s -p $COMMAND

Von help:

The -p option means to perform
history expansion on each ARG and display the result,

Dies bedeutet, dass Sie Dinge wie erweitern !!und das Ergebnis am Ende des Verlaufs speichern können.

Felipe Alvarez
quelle
history -swurde in einer Antwort vor zwei Jahren gegeben. Ist die -pVerbesserung der auf das? Was macht -pdas (Soweit dies sinnvoll ist, sollten Sie Ihre Antwort bearbeiten , um sie zu verbessern, und nicht auf meinen Kommentar mit einem anderen Kommentar antworten.)
G-Man sagt 'Reinstate Monica'
0

Eine andere Möglichkeit besteht darin, an den Anfang der Zeile zu gehen und das zu tun, was Sie tun wollten, gefolgt von &&, wie z

rm old_file && cmd [args]

Wenn das, was Sie tun wollten, erfolgreich ist, wird Ihr Befehl unmittelbar danach ausgeführt, und wenn er fehlschlägt, wird Ihr Befehl nicht ausgeführt, aber er befindet sich in der Historie. Sie könnten auch tun

test && cmd [args]

Da der Test ohne Argumente fehlschlägt, ist dies im Vergleich zur #Methode eine Handvoll zusätzlicher Tastenanschläge .

Nickolai
quelle
0

Ich denke, die "einige Tastenanschläge", die Sie möchten, sind Strg-U und Strg-Y, die eine Zeile im Kill-Ring speichern und später wieder herausziehen. Es geht nicht in die Geschichte ein, aber ich denke, es sollte nicht so sein, wie du es nicht getan hast.

Readline-Tötungsbefehle

Töten und reißen

Ich habe das vor Jahren gelernt, dann vergessen und auch nach diesen Tastenanschlägen gesucht.

Es wird auch hier besprochen: /unix/140741/how-to-save-a-command-you-entered-without-executing-it

Scipilot
quelle