Jak uzyskać dostęp do drugiego argumentu z ostatniego polecenia w historii?


11

Zaczynam się uczyć Regexa, dlatego wielokrotnie używam tego polecenia:

grep pattern /usr/share/dict/american-english 

Tylko część ze zmianami wzorców, więc muszę wielokrotnie pisać długie wyrażenie „ / usr / share / dict / american-english ”.

Ktoś zauważył, że możliwe jest rozwinięcie argumentu polecenia z historii poleceń, wpisując tajemnicze kombinacje znaków zamiast pełnego wyrażenia. Czy możesz mi powiedzieć te tajemnicze kombinacje postaci?


Czy chodzi o drugi argument czy ostatni argument?
mikeserv

w tym przypadku ostatnim argumentem jest drugi, nie uczyniłem tego rozróżnienia jasnym.
Abdul Al Hazred,

W takim przypadku bash, dash, zsh, mksh, i kshmuszle (co najmniej, że wiem o) będą wszyscy uznają $_specjalny parametr ostatni arg (niektóre to zrobić tylko w trybie interaktywnym, choć) . To po prostu rozwija się jak zmiennej: grep somepattern filename; grep otherpattern "$_". Zazwyczaj można zobaczyć jego zawartość na wyjściu set.
mikeserv

Odpowiedzi:


23

Możesz użyć <M-.>(lub <Esc>.jeśli twój klawisz Meta jest używany do czegoś innego), to znaczy Meta-kropka (lub <esc> kropka), gdzie Meta jest zwykle klawiszem Alt, aby przywołać ostatni argument poprzedniego polecenia. Najpierw napiszesz

$ grep foo /usr/share/dict/american-english

A jeśli chcesz grepować na coś innego, wpisz

$ grep bar

Po wpisaniu spacji, a następnie Esc.(tj. Najpierw naciśnięciu klawisza Escape, a następnie klawisza kropki):

$ grep bar /usr/share/dict/american-english

Możesz także użyć jednego z poniższych:

$ grep bar !:2
$ grep bar !$

Gdzie !:2i !$oznacza odpowiednio „drugi argument” i „ostatni argument”.


To jest dla bash i powłok, które używają readline przy użyciu powiązań emacs (domyślnie): z editing-mode vizestawem musisz dodać powiązanie ~/.inputrcdla yank-last-argi dla Zsh musisz powiązać insert-last-word...
jasonwryan

@jasonwryan, jeśli jest to ostatni arg chcesz, to w każdym z (interaktywne) zsh , bash, ksh, mksh, lub dashmuszli można po prostu używać $_. POSIXLY, że wiązanie jest już ustawione, ESC _kiedy set -o viobowiązuje.
mikeserv

@mikeserv Dzięki Mike, musiałem go odbić za
kompatybilność

@ jasonwryan - nie ma problemu - tak się składa, że ​​to jedyna sztuczka na klawiaturze powłoki, jaką znam - mam w zwyczaju zapamiętywanie / konfigurowanie wszystkich tych skrótów szybkiego pisania. Jeśli nie masz nic przeciwko, kompatybilność z czym? Czy używasz jakiegoś programu, który robi to inaczej? Och, pamiętam również ESC @letter dla _letterwiązania aliasu - ale tylko dlatego, że wciąż nie mogę wymyślić, jak to zrobić w / bsd editline.
mikeserv

@ mikeserv Wiążę go w ten sposób, tak aby był taki sam, bez względu na to, czy używam Bash lub Zsh (oba w trybie vi), czy na maszynie z Bash w trybie Emacsa (jest to jedno z powiązań, które naprawdę młotkuję).
jasonwryan

2

Ogólnie (z Bash) <Esc> N <Esc> .przywołuje N-ty argument z poprzedniego polecenia do bieżącego wiersza poleceń (gdzie N jest oparty na 0).

W przypadku drugiego argumentu z ostatniego polecenia będzie to:

<Esc> 1 <Esc> .

Jeśli chcesz trzeci argument, to

<Esc> 2 <Esc> .

... i tak dalej.

Jak wspomnieli inni, jeśli chcesz ostatni argument z poprzedniego polecenia, istnieje specjalny skrót do tego po prostu:

<Esc> .

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.