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.