Jak mogę przywołać argument poprzedniego polecenia bash?

312

Czy w Bash istnieje sposób na przywołanie argumentu poprzedniego polecenia?

Zwykle vi file.cpotem następuje gcc file.c.

Czy w Bash istnieje sposób na przywołanie argumentu poprzedniego polecenia?

The Coder
źródło
2
Możliwy duplikat: stackoverflow.com/questions/4009412/…
eugenevd

Odpowiedzi:

562

Możesz użyć $_lub, !$aby przywołać ostatni argument poprzedniego polecenia.

Również Alt + .można stosować przypomnieć ostatni argument któregokolwiek z poprzednich poleceń.

kodaddict
źródło
121
Również, jeśli chcesz dowolną argumentu można użyć !!:1, !!:2itp ( !!:0jest poprzedni samo polecenie.) See gnu.org/software/bash/manual/bashref.html#History-Interaction
janmoesen
41
Podobna do !$, należy użyć !^dla pierwszego argumentu.
Czy
13
ahh ... * nix ... jesteś rzeczą piękna ... codziennie kocham cię bardziej
jx12345
Jak odwołać się do przedostatniego argumentu poprzedniego polecenia? na przykład, jeśli dałem echo tiger rabbit, jak mogę odwołać tigersię do następującego polecenia?
Chan Kim
3
Alt + .nie działa w trybie vi. Tylko do waszej informacji, dla innych, którzy byli tutaj zdezorientowani.
Brian McCutchon
160

Jeśli poprzednie polecenie zawierało dwa argumenty, to tak

ls a.txt b.txt

i chciałeś pierwszego, możesz pisać

!:1

dający

a.txt

Lub jeśli chcesz jedno i drugie, możesz wpisać

!:1-2

dający

a.txt b.txt

Możesz to rozszerzyć na dowolną liczbę argumentów, np .:

!:10-12
Robert Gowland
źródło
@ RNA, po prostu spróbowałem jeszcze raz, aby upewnić się, że nie uwzględniłem literówki, czy możesz podać trochę więcej szczegółów (np. Linia poleceń ubuntu, cygwin dla systemu Windows? Komunikat o błędzie? Poprzednia linia?)
Robert Gowland
Używam GNU bash, wersja 3.2.51 (1) -release (x86_64-apple-darwin13) Copyright (C) 2007 Free Software Foundation, Inc. Komunikat o błędzie to-bash: :1-2: bad word specifier
RNA
2
Otrzymuję to samo, jeśli w poprzednim wierszu nie było dwóch argumentów. Na przykład. linia 1 ls a.txtlinia 2ll !:1-2
Robert Gowland
masz rację. To głupi błąd, który popełniłem. dzięki!
RNA
Również, aby uzyskać wszystkie argumenty, !:^-$można użyć lub oczywiście podobny kod w połączeniu z liczbami.
816-8055
88

!!:ngdzie njest pozycją argumentu zależną od 0.

Na przykład:

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

echo !!:2
# "two"

!Prefiks jest używany do dostępu do poprzednich poleceń.

Inne przydatne polecenia:

  • !$ - ostatni argument z poprzedniego polecenia
  • !^ - pierwszy argument (po programie / wbudowanym / skrypcie) z poprzedniego polecenia
  • !! - poprzednie polecenie (często wymawiane „bang bang”)
  • !n- numer polecenia nzhistory
  • !pattern - najnowsze dopasowanie poleceń pattern
  • !!:s/find/replace- ostatnie polecenie, substytut findzreplace

Więcej informacji na temat historii poleceń

Johntron
źródło
7
Zamiast tego !!:s/find/replacemożesz również ^find^replace.
Big McLargeHuge
Ponadto: !* - wszystkie argumenty z poprzedniego polecenia (po programie / wbudowanym / skrypcie). np .: ls *.tmp *.cache rm !*
Mszyca
68

W wierszu poleceń możesz nacisnąć esc- .lub alt+.

Przechodzi między ostatnim argumentem poprzednich poleceń.

Antonio Mano
źródło
Zawsze znajdowałem również klawisze i do pracy.
Wiadro
@Bucket klucze przechodzą przez poprzednie polecenia, podczas gdy rozwiązanie dostarczone przez Antonio pozwala przejść przez poprzednie argumenty (tylko ostatni argument każdego poprzedniego polecenia)
everyonesdesign
30

Jeśli znasz liczbę podaną w historii dla konkretnego polecenia, możesz praktycznie wziąć dowolny argument w tym poleceniu, używając następujących terminów.

Użyj następującego, aby pobrać drugi argument z trzeciego polecenia w historii,

!3:2

Użyj następującego, aby pobrać trzeci argument z piątego ostatniego polecenia w historii,

!-5:3

Używając znaku minus, poprosisz go o przejście od ostatniego polecenia historii.

Madisz
źródło
19

! * uruchamia nowe polecenie ze wszystkimi poprzednimi argumentami.

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

źródło
To nie działało dla mnie na OSX - musiałem $_zamiast tego użyć .
Mike W
16

Tak, możesz użyć !$do przywołania ostatniego argumentu poprzedniego polecenia.

Justin Ethier
źródło
Pamiętaj o kluczowym słowie „last”, zwłaszcza jeśli twoje polecenie zawierało wiele argumentów.
Wiadro