Wie können Sie sich an das letzte (n-te?) Übergebene Argument des vorherigen Befehls erinnern, den Sie mit bash verwendet haben?

9

Oft gebe ich verschiedene Befehle für dieselbe Datei aus. Zum Beispiel:

$ youtube-dl aB54c4p0eo #I made this video id up on the spot
$ mv aB54c4p0eo.flv kittens.flv
$ vlc kittens.flv
$ rm kittens.flv

Gibt es eine Möglichkeit, Argumente aus dem vorherigen Befehl im aktuellen wiederzuverwenden, damit ich sie nicht neu schreiben muss?

badp
quelle

Antworten:

15

alt-.ist sicherlich nett, aber wenn Sie zufällig bereits wissen, welches nummerierte Argument Sie möchten, können Sie schneller sein: !:nist das nth-Argument des vorherigen Befehls.

Es ist oft hilfreich, dies mit magischem Raum zu kombinieren. Um dies zu aktivieren, geben Sie Ihre .inputrc ein Space: magic-space. Wenn diese Option aktiviert ist, wird sie beim !:2Eingeben von Leerzeichen sofort auf ihren Wert erweitert, anstatt darauf zu warten, dass Sie die Eingabetaste drücken. Bewahrt Sie davor, versehentlich das falsche Argument zu ergreifen.

Cascabel
quelle
9

In Bash können Sie die Verknüpfung Alt+ verwenden ..
Wenn Sie es einmal treffen, erhalten Sie das letzte Argument. Wenn Sie mehr darauf drücken, werden Ihre letzten Argumente durchlaufen.

Christian
quelle
4

In bash lautet der Bezeichner für das "letzte Wort in der vorherigen Befehlszeile" !!$:

$ echo hello world
hello world
$ echo goodbye !!$
echo goodbye world # this is bash echoing actual cmd line before execution
goodbye world

Sie können auch die "Caret-Syntax" verwenden, um den ersten Teil der Befehlszeile zu ersetzen . Dies ist praktisch, wenn Sie mehrere Befehle in derselben Datei ausführen möchten:

file file.dat
^file^ls -l^ #gives `ls -l file.dat`
^ls -l^stat # gives `stat file.dat`

Es gibt viel mehr Möglichkeiten; Weitere Informationen finden Sie unter "Verlaufsersetzung" in der Bash (1) -Manpage.

Riccardo Murri
quelle
Diese Caret-Syntax ist tatsächlich langsamer als das Drücken des Pfeils und das Bearbeiten der Befehlszeile selbst ...
Badp
1
!!$kann auch geschrieben !$werden.
Mikel
3

In bash können Sie auch $ _ für das letzte Befehlszeilenargument des zuletzt eingegebenen Befehls verwenden:

$ youtube-dl aB54c4p0eo #I made this video id up on the spot
$ mv aB54c4p0eo.flv kittens.flv
$ vlc kittens.flv
$ rm kittens.flv

wird:

$ youtube-dl aB54c4p0eo #I made this video id up on the spot
$ mv $_ kittens.flv
$ vlc $_
$ rm $_
fschmitt
quelle
0

Ein relativ langsamer Weg besteht darin, den vorherigen Befehl abzurufen und den vorherigen Befehl durch den neueren zu ersetzen.

badp
quelle
Ich hoffe auf etwas schnelleres :)
Badp