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.
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.
Z wyjściem możesz zrobić cokolwiek zechcesz. Na przykład możesz podłączyć go do grep
polecenie, aby przeszukać historię poleceń.
history | grep your_search
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
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
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
.
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
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
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
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.
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 4
a potem pobiegł ping !^
, bash rozszerzy to do „ping google.com"
.
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.
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:*
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.
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
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 HISTSIZE
zmienna. 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.
Jak ignorować spacje i duplikaty
Bash pozwala ignorować wpisy historii zaczynające się od spacji, jeśli ustawisz HISTCONTROL
zmienna 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.
Bash pozwala również ignorować zduplikowane polecenia, które mogą zaśmiecać historię. Aby to zrobić, ustaw HISTCONTROL
do ignoredups.
HISTCONTROL=ignoredups
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.
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ć.