Come posso ricordare l'argomento del precedente comando bash?


Risposte:


562

È possibile utilizzare $_o !$per richiamare l'ultimo argomento del comando precedente.

Inoltre Alt + .può essere usato per richiamare l'ultimo argomento di uno qualsiasi dei comandi precedenti.


121
Inoltre, se vuoi un argomento arbitrario, puoi usare !!:1, !!:2ecc. ( !!:0È il comando precedente stesso.) Vedi gnu.org/software/bash/manual/bashref.html#History-Interaction
janmoesen

41
Simile a !$, si utilizza !^per il primo argomento.
Sarà il

13
ahh ... * nix ... sei una cosa bella ... ogni giorno ti amo di più
jx12345

Come possiamo fare riferimento al penultimo argomento del comando precedente? ad esempio, se ho dato echo tiger rabbit, come posso fare riferimento tigeral seguente comando?
Chan Kim,

3
Alt + .non funziona in modalità vi. Cordiali saluti, per gli altri che erano confusi qui.
Brian McCutchon,

160

Se il comando precedente aveva due argomenti, in questo modo

ls a.txt b.txt

e volevi il primo, potresti scrivere

!:1

dando

a.txt

O se volessi entrambi, potresti digitare

!:1-2

dando

a.txt b.txt

Puoi estenderlo a qualsiasi numero di argomenti, ad esempio:

!:10-12

@RNA, l'ho appena provato di nuovo per assicurarmi di non includere un refuso, potresti fornire qualche dettaglio in più (es. Riga di comando ubuntu, cygwin per windows? Messaggio di errore? Riga precedente?)
Robert Gowland

Sto usando GNU bash, versione 3.2.51 (1) -release (x86_64-apple-darwin13) Copyright (C) 2007 Free Software Foundation, Inc. Il messaggio di errore è-bash: :1-2: bad word specifier
RNA,

2
Ottengo la stessa cosa se non ci fossero due argomenti nella riga precedente. Per esempio. linea 1 ls a.txtlinea 2ll !:1-2
Robert Gowland,

hai ragione. Questo è uno stupido errore che ho fatto. Grazie!
RNA,

Inoltre, per ottenere tutti gli argomenti, !:^-$può essere utilizzato o, naturalmente, un codice simile in combinazione con i numeri.
816-8055,

88

!!:ndove si ntrova la posizione in base 0 dell'argomento desiderato.

Per esempio:

echo 'one' 'two'
# "one two"

echo !!:2
# "two"

Il !prefisso viene utilizzato per accedere ai comandi precedenti.

Altri comandi utili:

  • !$ - ultimo argomento dal comando precedente
  • !^ - primo argomento (dopo il programma / built-in / script) dal comando precedente
  • !! - comando precedente (spesso pronunciato "bang bang")
  • !n- numero comando ndahistory
  • !pattern - corrispondenza comandi più recente pattern
  • !!:s/find/replace- ultimo comando, sostituirlo findconreplace

Ulteriori informazioni sulla cronologia dei comandi


7
Invece di !!:s/find/replace, puoi anche ^find^replace.
Big McLargeHuge

Inoltre: !* - tutti gli argomenti del comando precedente (dopo il programma / built-in / script). es: ls *.tmp *.cache rm !*
Afide

68

Nella riga di comando è possibile premere esc- .o alt+.

Passa attraverso l'ultimo argomento dei comandi precedenti.


Ho sempre trovato anche le chiavi e funzionanti.
Benna,

Le chiavi di @Bucket passano attraverso i comandi precedenti, mentre la soluzione fornita da Antonio consente di passare attraverso argomenti precedenti (ultimo argomento di ogni comando precedente)
everyonesdesign

30

Se conosci il numero indicato nella cronologia per un determinato comando, puoi praticamente prendere qualsiasi argomento in quel comando usando i seguenti termini.

Utilizzare il seguito per prendere il secondo argomento dal terzo comando nella cronologia,

!3:2

Usa il seguito per prendere il terzo argomento dal quinto ultimo comando nella cronologia,

!-5:3

Usando un segno meno, gli chiedi di attraversare dall'ultimo comando della storia.


19

! * esegue un nuovo comando con tutti gli argomenti precedenti.

ls /tmp
cd !*
#you are now in /tmp

Questo non ha funzionato per me su OSX - ho dovuto usare $_invece.
Mike W,

16

Sì, è possibile utilizzare !$per richiamare l'ultimo argomento del comando precedente.


Fai attenzione alla parola chiave "last", soprattutto se il tuo comando conteneva più argomenti.
Secchio
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.