it-swarm.com.de

Verwenden Sie bash history, um einen vorherigen Befehl abzurufen, kopieren Sie ihn und führen Sie ihn dann aus, jedoch mit dem Kommentar

Nur eine Frage, um meine bash Fähigkeiten zu verbessern. Ich mache das immer:

$ history | grep some_long_command

...
...
123 some_long_command1.........
124 some_long_command2.........
...

Ich kann dann den Befehl ausführen, den ich gefunden habe:

!123

Ich möchte jedoch oft Folgendes tun:

some_long_command1foobar

Das heißt Ändern Sie den Befehl, bevor Sie ihn ausführen. Können Sie stattdessen bash verwenden, um diesen Befehl auszuführen:

#some_long_command1

so wird es kommentiert.

Dann muss ich den Befehl nicht mit der Maus markieren, bearbeiten und dann ausführen (ich kann nur die Tastatur verwenden - schneller).

Ich vermute, ich könnte ein Skript dafür schreiben, aber vielleicht ist schon irgendwo eine Funktionalität eingebaut ....?

Vielen Dank.

77
ale

Ich würde vorschlagen, anstelle des Befehls history den Befehl ctrl+r zu verwenden und diesen Befehl einzugeben. Wenn Sie eine Pfeiltaste drücken, um sie zu ändern, wird die automatische Vervollständigung der Erkennung nicht mehr ausgeführt und Sie können vor dem Ausführen bearbeiten.

UPDATE: Wenn Sie die verschiedenen Befehle durchlaufen möchten, die die soeben eingegebene Zeichenfolge enthalten, drücken Sie weiterhin ctrl+r.

137
Miquel

Tatsächlich können Sie einfach :p an den Befehl anhängen, um ihn zu drucken, ohne ihn tatsächlich auszuführen. Zum Beispiel:

$ ls -la
$ !!:p

Gibt ls -la als vorherigen Befehl aus, ohne ihn auszuführen, und Sie können einfach drücken  (nach oben), um es zu finden und zu bearbeiten.

Sie können auch tun

!123:p

um den 123. Befehl als vorherigen Befehl zu drucken.

58
joeschmidt45

Sie können auch den Befehl fcNAME _ verwenden, um den Befehl im Verlauf zu bearbeiten.

WIKI sagt,

fc ist ein Standardprogramm unter Unix, das Befehle auflistet oder bearbeitet und erneut ausführt, die zuvor in eine interaktive Shell eingegeben wurden. fc ist ein eingebauter Befehl im bash Shell; help fc zeigt Nutzungsinformationen an.


Abgesehen von mgekehrte inkrementelle Suche (Ctrl+R), wir haben noch ein paar Bash Abkürzungen:

Von man bash:

vorgeschichte (C-p)
 Ruft den vorherigen Befehl aus der Verlaufsliste ab und kehrt in der Liste zurück. 
nächste Geschichte (C-n)
 Rufen Sie den nächsten Befehl aus der Verlaufsliste ab und bewegen Sie sich in der Liste vorwärts. 
beginn der Geschichte (M- <)
 Gehen Sie zur ersten Zeile im Verlauf. 
ende der Geschichte (M->)
 Zum Ende des Eingabeverlaufs gehen, d. H. Zur aktuell eingegebenen Zeile. 
reverse-Search-History (C-r)
 Suchen Sie rückwärts, beginnend mit der aktuellen Zeile, und blättern Sie bei Bedarf 'nach oben' durch den Verlauf. Dies ist eine inkrementelle Suche. 
forward-search-history (C-s)
 Suchen Sie vorwärts, beginnend mit der aktuellen Zeile, und bewegen Sie sich nach Bedarf 'nach unten' durch den Verlauf. Dies ist eine inkrementelle Suche. 
nicht-inkrementeller-Reverse-Suchverlauf (M-p)
 Durchsuchen Sie den Verlauf rückwärts ab der aktuellen Zeile, indem Sie nicht inkrementell nach einer vom Benutzer angegebenen Zeichenfolge suchen. 
nicht-inkrementeller-Forward-Suchverlauf (M-n)
 Durchsuchen Sie den Verlauf vorwärts mit einer nicht inkrementellen Suche nach einer vom Benutzer angegebenen Zeichenfolge. 
yank-nth-arg (M-C-y)
 Fügen Sie das erste Argument in den vorherigen Befehl ein (normalerweise das zweite Wort in der vorherigen Zeile). Fügen Sie mit einem Argument n das n-te Wort aus dem vorherigen Befehl ein (die Wörter im vorherigen Befehl beginnen mit Wort 0). Ein negatives Argument fügt das n-te Wort vom Ende des vorherigen Befehls ein. Sobald das Argument n berechnet ist, wird das Argument extrahiert, als ob die "! N" -Historienerweiterung angegeben worden wäre.yank-last-arg (M-., M-_)
 Fügen Sie das letzte Argument in den vorherigen Befehl ein (das letzte Wort des vorherigen Verlaufseintrags). Verhalten Sie sich mit einem Argument genau wie yank-nth-arg. Aufeinanderfolgende Aufrufe von yank-last-arg durchlaufen die Verlaufsliste und fügen der Reihe nach das letzte Argument jeder Zeile ein. Mit den Verlaufserweiterungsfunktionen wird das letzte Argument extrahiert, als ob die Verlaufserweiterung "! $" Angegeben worden wäre. 
Shell-Expansionslinie (M-C-e)
 Erweitern Sie die Zeile wie die Shell. Dies führt eine Alias- und Verlaufserweiterung sowie alle Shell Word-Erweiterungen durch. Unter ERWEITERUNG DER GESCHICHTE finden Sie eine Beschreibung der Erweiterung der Geschichte. 
history-expand-line (M- ^)
 Führen Sie eine Verlaufserweiterung für die aktuelle Zeile durch. Eine Beschreibung der Verlaufserweiterung finden Sie weiter unten unter ERWEITERUNG DER GESCHICHTE. 
letztes Argument einfügen (M-., M-_)
 Ein Synonym für Yank-Last-Arg. 
operate-and-Get-Next (C-O)
 Akzeptieren Sie die aktuelle Zeile zur Ausführung und holen Sie die nächste Zeile relativ zur aktuellen Zeile aus dem Verlauf zur Bearbeitung. Jedes Argument wird ignoriert. 
edit-and-execute-befehl (C-xC-e)
 Rufen Sie einen Editor in der aktuellen Befehlszeile auf und führen Sie das Ergebnis als Shell-Befehle aus.
18
!123:gs/old/new/

Führt den Befehl 123 aus und ersetzt den String "old" durch den String "new".

10
John Lawrence

Sie können den Bearbeitungsmodus aufrufen, indem Sie M- ^ (Option-Shift-6 auf einem Mac) drücken.

Geben Sie Folgendes ein:

! 123M- ^

Und Sie bearbeiten den Befehl # 123. Es ist ein bisschen wie mit Strg-r, aber mit Ausrufezeichen-Syntax.

5
James Moore

Sie können auch setzen

shopt -s histverify

in Ihrem .bash_profile, wodurch alle Verlaufserweiterungen in der Befehlszeile angezeigt werden, ohne dass sie ausgeführt werden. 

3
chepner

Binden Sie statt history den Befehl history-search-backward/history-search-forward an Tastenkombinationen, die leicht zu merken sind (ich bevorzuge PgUp/PgDown). Um dies zu tun, fügen Sie dies in Ihre .inputrc-Datei ein:

"<key code>":  history-search-backward
"<key code>":  history-search-forward

Um <key code> zu erhalten, geben Sie Ctrl-V <key> in die Shell ein und ersetzen Sie den Startcode ^[ durch \e in der Ausgabe.

Nachdem dies eingerichtet ist, können Sie einfach some eingeben und PgUp drücken, um some_long_command zu erhalten. Wenn Sie some_long_command with_some_arg benötigen, aber später in der Historie ein ähnlicher Befehl some_long_command with_some_other_arg vorhanden ist, können Sie den Vorgang durchlaufen, indem Sie some eingeben und wiederholt auf PgUp drücken. Sie können auch some eingeben. Drücken Sie auf PgUp beginnen Sie sich zu unterscheiden, geben Sie ein paar Zeichen ein und drücken Sie erneut PgUp. Diese Fähigkeit, ähnliche Befehle schnell durchzublättern/zu unterscheiden, macht es meiner Meinung nach zu einem viel komfortableren Werkzeug als Ctrl-R.

3
Tgr

Vielleicht möchten Sie "Suggest Box" -ähnliche Historie ausprobieren - https://github.com/dvorka/hstr - Es liest die Bash-Historie und ermöglicht eine schnelle Navigation.

hh

Um den letzten Befehl zu erhalten, geben Sie einfach hh ein, navigieren Sie zum Befehl und verwenden Sie den Rechtspfeil, um ihn in der Befehlszeile anzuzeigen (wo Sie ihn bearbeiten und/oder einen Kommentar hinzufügen können).

1
Martin Dvorak

^ p um den zuletzt eingegebenen Befehl in unix/solaris zu erhalten

0
SudhakarM

Stellen

alias ​​r = 'fc -s'

in Ihrem .bashrc (Heimatverzeichnis) können Sie einfach eintippen

r <whatever>

bei der Eingabeaufforderung werden Sie eine Kopie des letzten <whatever>-Befehls (der gleichen Parameter) ausführen, der sich in Ihrer Historie befindet. Klicken Sie einfach auf den Pfeil, um zu sehen, was Sie ausgeführt haben, wenn Sie das Bedürfnis verspüren.

0
chuck