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


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ń.


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

@ 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ń


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ń.


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.


19

! * uruchamia nowe polecenie ze wszystkimi poprzednimi argumentami.

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

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.


Pamiętaj o kluczowym słowie „last”, zwłaszcza jeśli twoje polecenie zawierało wiele argumentów.
Wiadro
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.