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.