Skip to content

Jak korzystać z historii Bash w terminalu Linux lub macOS

2 de lipiec de 2021
img 58e25fec436c6

Powłoka bash to standardowe środowisko terminala dołączone do większości dystrybucji Linuksa, dołączone do systemu macOS i dostępne do instalacji w systemie Windows 10. Zapamiętuje wpisywane polecenia i przechowuje je w pliku historii. Prawdopodobnie znasz kilka podstaw historii basha, ale jest ona o wiele potężniejsza, niż mogłoby się wydawać.

Skróty klawiszowe

Aby przewijać historię basha, możesz użyć kilku przydatnych skrótów klawiaturowych bash. Naciśnij te skróty, a wcześniej używane polecenia pojawią się w monicie.

  • Strzałka w górę lub Ctrl+P: Przejdź do poprzedniego polecenia w historii. Naciśnij klawisz kilka razy, aby przejść wstecz przez używane polecenia.
  • Strzałka w dół lub Ctrl+N: Przejdź do następnego polecenia w historii. Naciśnij klawisz kilka razy, aby przejść dalej przez używane polecenia.
  • Alt+R: Cofnij wszelkie zmiany w poleceniu, które pobrałeś z historii, jeśli edytowałeś je w bieżącym wierszu.

Bash ma również specjalny tryb „przywołania”, którego możesz użyć do wyszukiwania poleceń, które wcześniej uruchomiłeś, zamiast przewijać je jeden po drugim.

  • Ctrl+R: Przywołaj ostatnie polecenie pasujące do podanych znaków. Naciśnij ten skrót i zacznij pisać, aby przeszukać historię bash dla polecenia.
  • Ctrl+O: Uruchom polecenie znalezione za pomocą Ctrl + R.
  • Ctrl+G: Opuść tryb wyszukiwania historii bez uruchamiania polecenia.

1625217870 950 Jak korzystac z historii Bash w terminalu Linux lub macOS

Wyświetl swoją historię basha

Możesz wydrukować całą historię basha na ekranie, uruchamiając jedno polecenie:

history

Zobaczysz listę wszystkich poleceń w historii basha wraz z liczbą po lewej stronie każdego z nich. Polecenie z „1” obok jest najstarszym poleceniem w historii basha, podczas gdy polecenie o najwyższym numerze jest najnowsze.

1625217870 735 Jak korzystac z historii Bash w terminalu Linux lub macOS

Z wyjściem możesz zrobić cokolwiek zechcesz. Na przykład możesz podłączyć go do greppolecenie, aby przeszukać historię poleceń.

history | grep your_search

1625217870 631 Jak korzystac z historii Bash w terminalu Linux lub macOS


Możesz również podłączyć go do tail polecenie, aby wyświetlić tylko niewielką liczbę ostatnio uruchomionych poleceń. Na przykład następujące polecenie wyświetli 5 ostatnich wpisów w Twojej historii.

history | tail -5

1625217870 903 Jak korzystac z historii Bash w terminalu Linux lub macOS

Uruchamiaj polecenia ze swojej historii

Bashcan szybko „rozwija” poprzednie polecenia lub rozwija je i modyfikuje. Ta funkcja jest znana jako „rozwijanie historii” i używa wykrzyknika, znanego jako „huk”. Po prostu wpisz je w monicie i naciśnij Enter, aby uruchomić je tak, jak uruchamiasz każde inne polecenie.

Aby uruchomić określone polecenie z historii według jego numeru, użyj następującego polecenia:

!#

Załóżmy na przykład, że chcesz uruchomić 12. polecenie z historii basha. To jest polecenie z „12” po lewej stronie, gdy uruchomisz history Komenda. Wpisałbyś następujące polecenie.

!12

1625217870 755 Jak korzystac z historii Bash w terminalu Linux lub macOS

Aby ponownie uruchomić ostatnio uruchomione polecenie, wpisz następujące polecenie. Ma to taki sam efekt, jak jednokrotne naciśnięcie strzałki w górę, aby wyświetlić poprzednie polecenie, a następnie naciśnięcie klawisza Enter.

!!


Możesz także odwołać się do polecenia o pewną liczbę linii wstecz. Na przykład, !-2 uruchomiłby przedostatnią komendę, którą uruchomiłeś. !! oznacza to samo co !-1 .

1625217870 645 Jak korzystac z historii Bash w terminalu Linux lub macOS

To rozszerzenie działa w dowolnym miejscu na linii. Możesz dodać wszystko, co chcesz przed lub po!!lub dowolne inne wyrażenia w tej sekcji. Na przykład możesz wpisać następujące polecenie, aby ponownie uruchomić ostatnie polecenie, które wykonałeś sudo, dając mu uprawnienia administratora. Jest to szczególnie przydatne, jeśli zapomnisz dodać sudo przed uruchomieniem polecenia.

sudo !!

Lub, na przykład, możesz ponownie uruchomić poprzednie polecenie i potoku jego dane wyjściowe do grep, aby wyszukać jakiś tekst.

!! | grep text

1625217871 794 Jak korzystac z historii Bash w terminalu Linux lub macOS

Aby wyszukać polecenie w historii i uruchomić je, wpisz następujące polecenie. Spowoduje to uruchomienie ostatniego polecenia, które pasuje do podanego tekstu:

!text

Tak więc, jeśli niedawno uruchomiłeś polecenie, które zaczynało się od ping, możesz uruchomić następujące polecenie, aby go wyszukać. Spowoduje to przeszukanie historii wstecz, znalezienie najnowszego polecenia, które zaczyna się od „pi“ i natychmiast go uruchom:

!pi

1625217871 423 Jak korzystac z historii Bash w terminalu Linux lub macOS

Możesz dołączyć :p do dowolnego z powyższych rozszerzeń, a bash wydrukuje polecenie na terminalu bez jego uruchamiania. Jest to przydatne, jeśli chcesz potwierdzić, że wybierasz właściwe polecenie przed jego uruchomieniem.

!12:p

!!:p

!text:p

1625217871 362 Jak korzystac z historii Bash w terminalu Linux lub macOS

Ponowne wykorzystanie argumentów ze swojej historii

Bash pozwala również na uruchomienie nowego polecenia, ale użyj argumentów z poprzednich poleceń w historii. Może to pomóc w szybkim ponownym użyciu długich lub skomplikowanych argumentów bez konieczności ich ponownego wpisywania.

command !$


Załóżmy na przykład, że uruchomiłeś polecenie touch /home/chris/some_long_file_name_you_dont_want_to_type_again . Teraz chcesz uruchomić polecenie nano /home/chris/some_long_file_name_you_dont_want_to_type_again. Zamiast pisać wszystko od zera, możesz uruchomić:

nano !$

!$ sprawi, że bash automatycznie uzupełni ostatni argument z poprzedniego polecenia.

1625217871 272 Jak korzystac z historii Bash w terminalu Linux lub macOS

To wypełnia tylko ostatni argument. Więc jeśli uciekniesz ping google.com -c 4 a potem biegnij ping !$ , to po prostu rozszerzy się do „ping 4“.

Aby naprawić tę sytuację, możesz użyć następującej sztuczki, aby rozwinąć pierwszy argument w wierszu, a nie ostatni:

command !^

Więc jeśli uciekłeś ping google.com -c 4a potem pobiegł ping !^ , bash rozszerzy to do „ping google.com".

1625217871 469 Jak korzystac z historii Bash w terminalu Linux lub macOS


Aby wypełnić wszystkie argumenty użyte w poprzednim poleceniu zamiast pojedynczego argumentu, użyjesz następującego:

command !*

Więc jeśli uciekłeś ping !*zamiast tego bash automatycznie wypełniłby wszystkie argumenty użyte w poprzednim poleceniu.

1625217871 433 Jak korzystac z historii Bash w terminalu Linux lub macOS

Możesz użyć tej samej sztuczki, której używasz torun poleceń ze swojej historii, aby uzyskać z nich argumenty. Wystarczy skorzystać z poniższego formularza.

command !abc:#

Na przykład uruchomiliśmy polecenie sudo hostname ubuntu wcześniej. Jeśli uruchomimy następujące polecenie, bash przeszuka historię wstecz, aby znaleźć ostatnie polecenie rozpoczynające się od wpisywanych liter i wypełni podany przez nas argument. Więc jeśli uciekamy echo !su:2 , bash przeszuka wstecz, aby znaleźć ostatnie polecenie zaczynające się od „su” i uzupełnij drugi argument, którym jest „ubuntu“.

Inne sztuczki działają tak, jak można się spodziewać. Na przykład zastąpienie liczby gwiazdką, znane jako symbol wieloznaczny, powoduje, że bash wypełnia wszystkie argumenty polecenia:

command !abc:*

1625217871 221 Jak korzystac z historii Bash w terminalu Linux lub macOS

Uruchom ponownie poprzednie polecenie i zmodyfikuj je

Bash pozwala również na ponowne uruchomienie poprzedniego polecenia i określenie czegoś, co powinno zostać zmienione. Może to być przydatne do poprawiania literówki w poleceniu. Na przykład następujące polecenie ponownie uruchomi poprzednie polecenie, zastępując tekst „abc”w nim z tekstem”xyz“.

^abc^xyz


Na przykład, jeśli przypadkowo uciekłeś ping gogle.com, możesz wtedy biec ^gog^goog a bash uruchomiłby polecenie ping google.com zamiast.

1625217871 680 Jak korzystac z historii Bash w terminalu Linux lub macOS

Gdzie przechowywana jest Twoja historia i jak ją wyczyścić

Powłoka bash domyślnie przechowuje historię poleceń, które uruchomiłeś w pliku historii konta użytkownika pod adresem ~/.bash_history. Na przykład, jeśli twoja nazwa użytkownika to bob, znajdziesz ten plik w /home/bob/.bash_history.

Ponieważ Twoja historia jest przechowywana w pliku, utrzymuje się między sesjami. Możesz uruchomić niektóre polecenia, wylogować się, wrócić następnego dnia, a te polecenia nadal będą znajdować się w pliku historii, gotowe do wyświetlenia i użycia. Każde konto użytkownika ma swój własny plik historii z osobną historią poleceń.

Aby wyczyścić historię basha, możesz uruchomić następujące polecenie. To usuwa zawartość pliku .bash_history Twojego konta użytkownika:

history -c

1625217871 826 Jak korzystac z historii Bash w terminalu Linux lub macOS

Bash domyślnie zapamiętuje tylko ograniczoną liczbę poleceń, zapobiegając zbyt dużemu rozrostowi pliku historii. Liczba wpisów historii, które bash pamięta, jest kontrolowana przez HISTSIZEzmienna. Wartość domyślna to zwykle 500 lub 1000 wpisów. Możesz uruchomić następujące polecenie, aby wyświetlić rozmiar historii bash w swoim systemie.

echo $HISTSIZE

Aby ustawić historię na zero, uruchom następujące polecenie.

HISTSIZE=0


W bieżącej sesji bash nie będzie przechowywać żadnych wpisów historii, chyba że uruchomisz polecenie takie jak HISTSIZE=1000 ustawić go z powrotem na określoną liczbę wpisów.

1625217871 425 Jak korzystac z historii Bash w terminalu Linux lub macOS

Jak ignorować spacje i duplikaty

Bash pozwala ignorować wpisy historii zaczynające się od spacji, jeśli ustawisz HISTCONTROLzmienna do ignorespace.

HISTCONTROL=ignorespace

Wpisz spację przed poleceniem przed uruchomieniem go w powłoce bash, a polecenie będzie działać normalnie, ale nie pojawi się w historii, jeśli ta zmienna jest włączona. Dzięki temu możesz zachować nieco czystszą historię, wybierając uruchamianie poleceń bez ich pojawiania się w historii.

1625217871 964 Jak korzystac z historii Bash w terminalu Linux lub macOS

Bash pozwala również ignorować zduplikowane polecenia, które mogą zaśmiecać historię. Aby to zrobić, ustaw HISTCONTROLdo ignoredups.

HISTCONTROL=ignoredups

1625217872 884 Jak korzystac z historii Bash w terminalu Linux lub macOS

Aby korzystać z obu ignorespace i ignoredups funkcja, ustaw HISTCONTROL zmienna do ignoreboth.

HISTCONTROL=ignoreboth

Zauważ, że ustawione przez Ciebie zmienne bash będą zachowywane tylko w bieżącej sesji. Musisz dodać je do pliku .bashrc swojego konta użytkownika, aby te wartości były automatycznie ustawiane w każdej uruchomionej sesji bash, jeśli wolisz.

1625217872 360 Jak korzystac z historii Bash w terminalu Linux lub macOS


Powłoka bash to złożone narzędzie z wieloma innymi opcjami. Skonsultuj się z Wbudowana historia Bash i Rozszerzenie historii sekcje w oficjalnym podręczniku bash bardziej szczegółowe informacje i inne zaawansowane sztuczki, których możesz użyć.

Czy ten post był pomocny?