Ich weiß , wie ein Befehl wiederholen und mehr Text , nachdem er hinzu mit !!
etwa so:
ls -l
!! tmp
Die zweite Zeile wird erweitert zu ls -l tmp
.
Aber was ist, wenn ich dem Befehl zwischen den Wörtern Parameter hinzufügen möchte? Zum Beispiel, wenn ich Folgendes getan habe:
ls tmp
... dann möchte ich oft den -l
Parameter zum Befehl hinzufügen , aber nicht das Ganze erneut eingeben oder nach oben drücken und die Pfeiltasten verwenden, um den Cursor auf die richtige Stelle zu setzen. !! -l
funktioniert nicht, weil es wird, ls tmp -l
was nicht gültig ist. (In der Praxis ist der Befehl viel länger als das einfache Beispiel, das ich hier verwendet habe.)
Mit anderen Worten, ich suche nach etwas wie ?? -l
wo ??
ist etwas, das den vorherigen Befehl wiederholt, aber -l
zwischen dem ersten und dem zweiten Wort hinzufügt .
Nur um es klar zu machen, ls -l tmp
ist nur ein vereinfachtes Beispiel. Der reale Anwendungsfall ist näher an so etwas wie /very/long/path/to/very-long-command --with=a --very=long --parameter=list
.
quelle
^ ^ -l ^
welcher Austauschspace
fürspace -l space
oder^s^s -l^
(ist aber auchls tmp -l
praktikabel)!!:0 -l /tmp
. Hier0
bedeutet erstes Wort, dh. der Befehl selbst. Natürlich können Sie dies auch tun,!!:0 -l !!:1
wenn Sie nicht wiederholen möchten/tmp
.Antworten:
!!:0
ist das 0-te Wort des vorherigen Befehls und enthält!!:*
alle Wörter außer dem 0-ten.ist der Befehl, den Sie suchen.
Quelle https://www.gnu.org/software/bash/manual/bash.html#Word-Designators
quelle
-b
Flag vergessen , das einen neuen Zweig öffnet. Also könnte ich tippengit checkout whatever
, um das hinzuzufügen-b
, was ich brauche, ich kann dies tun:!!- -b !$
weil!!-
alles außer dem letzten Wort ist und!$
das letzte Wort ist.Du kannst:
Dies wird anrufen
ls -l /tmp
. Siehe diebash
Handbuchseite:quelle
man history
ls /tmp
nachls -l /tmp
?Mit Bash können Sie schnell suchen und in Ihrer Eingabeaufforderung einen Befehl aus Ihrem Verlauf zurückerhalten, damit Sie ihn vor der Ausführung von Hand bearbeiten können.
An der Eingabeaufforderung:
ls
,tmp
oder sogarmp
zu Spiells tmp
): der zuletzt verwendete Befehl Ihre Tastenanschläge entsprechen , werden angezeigt , während Sie tippen.tab
, um ihn in Ihre normale Eingabeaufforderung aufzunehmen: Er wird noch nicht ausgeführt. Er wartet hier auf Ihre Änderungen, z. B. das Hinzufügen, Entfernen oder Ändern von Parametern oder das Anwenden eines anderen Befehls auf die gleiche Datei usw.quelle
Up
anstatt zu tippen!!
. Wenn es sich um einen früheren Befehl handelt, drücken SieCtrl+R foo
statt!foo
(nicht genau derselbe, aber nahe genug).Drücken Sie die folgenden Tasten, um den vorherigen Befehl mit einer Option zu starten, die unmittelbar nach dem Befehlsnamen hinzugefügt wurde:
Up Home Ctrl+ Right Space(geben Sie die Option ein)Enter
Wenn die Cursortasten auf Ihrem System nicht funktionieren, können Sie stattdessen die Emacs-Bewegungstasten verwenden:
Ctrl+ P Ctrl+ A Meta+ F Space(geben Sie die Option ein)Enter
Wenn der Befehlsname mehrere Wörter enthält (z. B. weil es sich um einen Pfad mit Schrägstrichen handelt), bewegt sich Ctrl+ Rightnur über den ersten Schrägstrich hinaus. Suchen Sie stattdessen das erste Leerzeichen.
Up Home Ctrl+ S Space Esc Space(geben Sie die Option ein) Enter
Ctrl+ P Ctrl+ A Ctrl+ S Space Esc Space(geben Sie die Option ein)Enter
Bei dieser Suche können Sie mit Up Upanstelle von Up Homeoder Ctrl+ P Ctrl+ Panstelle von Ctrl+ P Ctrl+ beginnen A. Die Anzahl der Tastendrücke ist gleich, aber die Eingabe ist etwas einfacher, aber weniger intuitiv.
Wenn Sie möchten, können Sie die Funktion zum Ersetzen des Verlaufs verwenden , bei der weniger Tastendrücke erforderlich sind, wenn der Befehl Schrägstriche enthält.
^ ^ --option
Beachten Sie das nachgestellte Leerzeichen nach der Option: Sie ersetzen das erste Leerzeichen im Befehl durch ein Leerzeichen, die neue Option und ein anderes Leerzeichen.
quelle