Come accedere al secondo argomento dall'ultimo comando nella cronologia?


11

Sto iniziando a imparare un po 'di Regex, quindi uso ripetutamente questo comando:

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

Solo la parte con lo schema cambia, quindi devo scrivere ancora e ancora l'espressione lunga " / usr / share / dict / american-english ".

Qualcuno ha fatto notare che è possibile espandere un argomento di un comando dalla cronologia dei comandi digitando combinazioni di caratteri criptici anziché l'espressione completa. Potresti dirmi quelle combinazioni di caratteri criptici?


Riguarda il secondo argomento o l'ultimo argomento?
Mikeserv,

proprio in questo caso l'ultimo argomento sembra essere il secondo, non ho chiarito questa distinzione.
Abdul Al Hazred,

In tal caso, il bash, dash, zsh, mksh, e kshconchiglie (almeno, che io conosco) saranno tutti riconoscere il $_parametro speciale ultima arg (alcuni lo fanno in modo che solo in modalità interattiva, però) . E 'appena si espande come una variabile: grep somepattern filename; grep otherpattern "$_". Di solito puoi vedere i suoi contenuti nell'output di set.
Mikeserv,

Risposte:


23

Puoi usare <M-.>(o <Esc>.se il tuo tasto Meta è usato per qualcos'altro), cioè Meta-punto (o <esc> punto), dove Meta è di solito il tasto Alt, per richiamare l'ultimo argomento del comando precedente. Quindi, per prima cosa dovresti digitare

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

E poi se volessi chiedere qualcos'altro, scriverai

$ grep bar

Dopo aver digitato uno spazio e quindi Esc.(ovvero, prima premendo il tasto Esc, quindi il tasto punto):

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

Puoi anche utilizzare uno dei seguenti:

$ grep bar !:2
$ grep bar !$

Dove !:2e !$significa rispettivamente "secondo argomento" e "ultimo argomento".


Questo è per bash e shell che usano readline usando le associazioni emacs (default): con editing-mode viset devi aggiungere un'associazione ~/.inputrcper yank-last-arge per Zsh devi associare insert-last-word...
jasonwryan

@jasonwryan, se è l'ultimo arg desiderato, quindi in una qualsiasi delle (interattivo) zsh , bash, ksh, mksh, o dashconchiglie si può semplicemente utilizzare $_. POSSIBILMENTE tale associazione è già impostata, tuttavia, su ESC _quando set -o viè in vigore.
Mikeserv,

@mikeserv Grazie Mike, devo averlo rimbalzato per compatibilità ...
jasonwryan,

@jasonwryan - nessun problema - questo è solo l'unico trucco della tastiera della shell che conosco - faccio schifo nel ricordare / configurare tutte quelle scorciatoie di tipo rapido. Se non ti dispiace, la compatibilità con cosa? C'è qualche programma che usi che lo fa diversamente? Oh, posso anche ricordare ESC @letter per l' _letterassociazione alias - ma solo perché non riesco ancora a capire come farlo funzionare con / bsd editline.
Mikeserv,

@mikeserv Lo associo in questo modo in modo che sia lo stesso, indipendentemente dal fatto che io stia usando Bash o Zsh (entrambi in modalità vi) o su una macchina con Bash in modalità Emacs (è uno degli attacchi che martello davvero).
Jasonwryan,

2

In generale (con Bash) <Esc> N <Esc> .richiamerà l'ennesimo argomento dal comando precedente nella riga di comando corrente (dove N è basato su 0).

Per il secondo argomento dell'ultimo comando, sarebbe:

<Esc> 1 <Esc> .

Se volevi il terzo argomento, allora

<Esc> 2 <Esc> .

... e così via.

Come altri hanno già detto, se si desidera l' ultimo argomento dal comando precedente, c'è un collegamento specifico per questo in solo:

<Esc> .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.