Jak wspominasz ostatni (n-ty?) Argument poprzedniej komendy użytej w bash?

9

Często wydaje różne polecenia w tym samym pliku. Na przykład:

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

Czy istnieje sposób ponownego wykorzystania argumentów z poprzedniego polecenia w bieżącym, aby nie musiałem go przepisywać?

badp
źródło

Odpowiedzi:

15

alt-.jest z pewnością miło, ale jeśli zdarzy ci się już wiedzieć, którego argumentu numerycznego chcesz, możesz być szybszy: !:njest to nargument poprzedniego polecenia.

Często pomocne jest połączenie tego z magiczną przestrzenią. Aby to włączyć, wpisz .inputrc Space: magic-space. Po włączeniu tej opcji po wpisaniu spacji !:2zostanie ona natychmiast powiększona do wartości zamiast czekać na naciśnięcie klawisza Enter. Chroni Cię przed przypadkowym złapaniem niewłaściwego argumentu.

Cascabel
źródło
9

W bash możesz użyć skrótu Alt+ ..
Jednokrotne trafienie da ci ostatni argument. Naciśnięcie go więcej spowoduje przejście przez ostatnie argumenty.

chrześcijanin
źródło
4

W bash desygnat „ostatniego słowa w poprzednim wierszu poleceń” to !!$:

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

Możesz także użyć „składni karetki”, aby zastąpić początkową część wiersza poleceń; przydaje się to, jeśli chcesz wykonać kilka poleceń w tym samym pliku:

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

Istnieje wiele innych możliwości; zobacz „Podstawianie historii” na stronie podręcznika bash (1), aby poznać szczegóły.

Riccardo Murri
źródło
Ta składnia karetki jest w rzeczywistości wolniejsza niż samodzielne naciskanie strzałki i edytowanie wiersza poleceń ...
badp
1
!!$można też napisać !$.
Mikel
3

W bash możesz również użyć $ _ dla ostatniego argumentu wiersza poleceń ostatniego wpisanego polecenia:

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

staje się:

$ youtube-dl aB54c4p0eo #I made this video id up on the spot
$ mv $_ kittens.flv
$ vlc $_
$ rm $_
fschmitt
źródło
0

Jednym stosunkowo powolnym sposobem jest przywołanie poprzedniego polecenia i zastąpienie poprzedniego polecenia nowym.

badp
źródło
Liczę na coś szybszego :)
badp