Führen Sie einen Befehl mit dem Argument des letzten Befehls aus

34

Wenn Sie Befehle ausführen, müssen Sie manchmal einen Befehl mit dem Argument des letzten Befehls ausführen. Wie kannst du das tun?

Natürlich mit Ausnahme der Verwendung der Pfeiltasten und DelTasten: ... DelDelDel... Del<new_command>.

Radu Rădeanu
quelle

Antworten:

45

Wenn Sie beispielsweise diesen Befehl ausführen:

mkdir long_path_here/new_dir

höchstwahrscheinlich möchten Sie in das kürzlich erstellte Verzeichnis wechseln. Sie können dies mit den folgenden "Verknüpfungen" tun:

  • cd Esc.- Geben Sie cdund nach dem Drücken Escgefolgt von ein .(nicht gleichzeitig). Wenn der vorherige Befehl keine Argumente enthält, erhalten Sie den vorherigen Befehl selbst.
  • cd !*- In diesem Fall erhalten Sie alle Argumente aus dem Befehl previuos. Wenn der vorherige Befehl keine Argumente enthält, erhalten Sie nichts.
  • cd Alt+ .- cdund nach Altund .(gleichzeitig) drücken . Wenn Sie auf diese Weise weiter drücken .(ohne loszulassen Alt), erhalten Sie das letzte Argument für jeden Befehl aus dem Verlauf. Wenn ein Befehl keine Argumente enthält, erhalten Sie den Befehl selbst.

Im Allgemeinen: <command> Esc.oder <command> !*oder <command> Alt+ ..

Radu Rădeanu
quelle
wow, du hast mir hunderte von
stunden
32

Es gibt einige Verknüpfungen, wenn Sie alle Argumente des vorherigen Befehls oder nur das letzte Argument verwenden möchten.

  • Für alle Argumente: <command> !*
  • Nur zum letzten Argument: <command> !$

Beispiele:

ls foo/ bar/
ls !* # Gives the results of ls foo/ bar/

ls foo/ bar/
ls !$ # Gives the results of ls bar/

Wenn Sie ein einzelnes Argument aus einer Liste von Argumenten aus dem vorherigen Befehl verwenden möchten, können Sie verwenden <command> !!:<argNumber>

Beispiel:

ls foo/ bar/ baz/
ls !!:2 # Gives the results of ls bar/
ls foo/ bar/ baz/
ls !!:1 # Gives the results of ls foo/
RandomMooCow
quelle
2
Sie benötigen nur eine !in der Single-Arg-Version, z !:2. Angenommen, Standard-Bash.
Belacqua
3
Sie können !^anstelle von auch verwenden !:1.
Paddy Landau
7

Erwähnt !*und !$ist eine gute Sache, aber wenn Sie ein wenig bearbeiten müssen, kommen Readline-Verknüpfungen, um zu helfen!

Zum Beispiel können Sie anstelle der unzähligen ... DelDelDel... Deleinfach drücken Ctrl-a(zum Anfang der Zeile springen) Alt+d(bis zum Ende des Wortes löschen)

Für mehr Infos man readlineund suchen Sie nach Default key bindings.

defhlt
quelle
4

Um das ndritte Argument aus Ihrem vorherigen Befehl zu übernehmen, geben Sie Alt+ n+ ein Alt_. Zum Beispiel nach:

$ echo 1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10

Wenn Sie echogefolgt von Alt2Alt_tippen, erhalten Sie dies bei der nächsten Eingabeaufforderung:

$ echo 2

Der "Screenshot" nach dem Treffer Alt2lautet:

(arg: 2) echo

Sie können Alt_mehrere Male wiederholen , um das nArgument der vorherigen Befehle nacheinander abzurufen.

Eine weitere nützliche Idee ist das Definieren eines Alias r="fc -s". Dann können Sie Befehlsersetzungen durchführen:

$ echo 1
1
$ r echo=history
history 1
27755  history 1
Alok
quelle