Powłoka bash jest standardowym środowiskiem terminala dołączonym do większości dystrybucji Linuksa, zawartym w macOSie i dostępnym do instalacji w systemie Windows 10. Zapamiętuje polecenia, które wpisujesz i przechowuje je w pliku historii. Prawdopodobnie znasz kilka podstaw historii basha, ale jest o wiele potężniejsza, niż możesz sobie wyobrazić.
Aby przeglądać historię basha, możesz użyć kilku przydatnych skrótów klawiaturowych basha. Naciśnij skróty, a polecenia, których używałeś poprzednio, pojawią się w monicie.
Bash ma również specjalny tryb "przypomnienia", którego możesz użyć do wyszukiwania wcześniej wykonanych poleceń zamiast przewijać je jeden po drugim.
Możesz wydrukować całą historię basha na ekranie, wykonując pojedyncze polecenie:
historia
Zobaczysz listę wszystkich poleceń w historii bash wraz z liczbą po lewej stronie każdego z nich. Polecenie z "1" obok niego jest najstarszym poleceniem w historii basha, natomiast polecenie o najwyższym numerze jest najnowszym.
Z wyjściem możesz zrobić cokolwiek chcesz. Na przykład możesz go potokować do pliku grep
polecenie, aby przeszukać historię poleceń.
historia grep your_search
Możesz również potokować go do ogon
Polecenie, aby wyświetlić tylko niewielką liczbę ostatnio wykonanych poleceń. Na przykład poniższe polecenie wyświetli 5 ostatnich wpisów w historii.
historia ogon -5
Bash może szybko "rozwinąć" poprzednie polecenia lub rozwinąć je i zmodyfikować. Ta funkcja jest znana jako "rozszerzenie historii" i używa wykrzyknika, znanego jako "bang". Po prostu wpisz je w monicie i naciśnij Enter, aby uruchomić je tak, jakbyś uruchamiał inne polecenie.
Aby uruchomić określone polecenie z historii według jego numeru, użyj następującego polecenia:
!#
Na przykład, powiedzmy, że chcesz uruchomić 12. polecenie z historii bash. To polecenie z "12" po lewej stronie, gdy uruchomisz historia
dowództwo. Możesz wpisać następujące polecenie.
!12
Aby ponownie uruchomić ostatnie uruchomione polecenie, wpisz następujące polecenie. Ma to taki sam efekt, jak naciśnięcie strzałki w górę raz, aby wyświetlić poprzednie polecenie, a następnie naciśnięcie klawisza Enter.
!!
Możesz również odwołać się do polecenia z określoną liczbą linii. Na przykład, !-2
uruchomi drugie, ostatnie polecenie, które 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 wykonane polecenie sudo
, nadając mu uprawnienia root'a. 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 potokować jego wynik do grep, aby wyszukać jakiś tekst.
!! | grep tekst
Aby wyszukać polecenie w historii i uruchomić je, wpisz następujące polecenie. Spowoduje to uruchomienie ostatniego polecenia pasującego do podanego tekstu:
!tekst
Tak więc, jeśli ostatnio uruchomiłeś polecenie, które zaczęło się świst
, możesz uruchomić następujące polecenie, aby go wyszukać. Spowoduje to przeszukanie wstecz w historii, zlokalizowanie najnowszego polecenia zaczynającego się od "Liczba Pi
"I natychmiast uruchom go:
!Liczba Pi
Możesz dołączyć : p
do dowolnego z powyższych rozszerzeń i bash wydrukuje polecenie do terminala bez jego uruchamiania. Jest to przydatne, jeśli chcesz potwierdzić, że wybierasz właściwe polecenie, zanim je uruchomisz.
! 12: p
!!: p
! text: p
Bash pozwala również na uruchamianie 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 ponownego wpisywania ich.
polecenie! $
Na przykład powiedzmy, ż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! $
The !$
sprawi, że bash automatycznie uzupełni ostatni argument z poprzedniego polecenia.
To tylko wypełnia ostatni argument. Tak więc, jeśli uciekasz ping google.com -c 4
a następnie uciekać ping! $
, to po prostu rozszerzy się do "ping 4
“.
Aby naprawić tę sytuację, możesz użyć poniższej sztuczki, aby rozwinąć pierwszy argument na linii, a nie ostatni:
polecenie! ^
Więc jeśli biegasz ping google.com -c 4
a następnie uciekł ping! ^
bash rozszerzy to na "ping google.com "
.
Aby wypełnić wszystkie argumenty użyte w poprzednim poleceniu, zamiast tylko jednego argumentu, użyjesz następującego:
dowództwo !*
Więc jeśli biegasz ping! *
zamiast tego bash automatycznie wypełni wszystkie argumenty użyte w poprzednim poleceniu.
Możesz użyć tej samej sztuczki, której używasz do uruchamiania poleceń z historii, aby uzyskać od nich argumenty. Po prostu skorzystaj z poniższego formularza.
polecenie! abc: #
Na przykład uruchomiliśmy polecenie sudo nazwa hosta ubuntu
wcześniej. Jeśli uruchomimy następujące polecenie, bash będzie wyszukiwać wstecz w historii, aby znaleźć ostatnie polecenie zaczynające się od liter, które wpisujemy, i wpisać argument, który określamy. Tak więc, jeśli uciekniemy echo! su: 2
, bash rozpocznie wyszukiwanie, aby znaleźć ostatnie polecenie zaczynające się od "su
"I wypełnij drugi argument, którym jest"ubuntu
“.
Inne sztuczki działają tak, jak można się spodziewać. Na przykład zastąpienie liczby gwiazdką, znaną jako symbol wieloznaczny, powoduje, że bash wypełnia wszystkie argumenty z polecenia:
polecenie! abc: *
Bash pozwala również na powtórzenie poprzedniego polecenia i określenie czegoś, co powinno zostać zmienione. Może to być przydatne do korekty literówki w poleceniu. Na przykład następujące polecenie spowoduje ponowne uruchomienie poprzedniego polecenia, 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 uciekać ^ gog ^ goog
a bash uruchomi polecenie ping google.com
zamiast.
Powłoka bash domyślnie przechowuje historię poleceń uruchomionych w pliku historii konta użytkownika w ~ / .bash_history. Na przykład, jeśli twoja nazwa użytkownika jest bob, znajdziesz ten plik w /home/bob/.bash_history.
Ponieważ twoja historia jest przechowywana w pliku, utrzymuje się pomiędzy sesjami. Możesz uruchomić niektóre polecenia, wylogować się, wrócić następnego dnia, a te polecenia będą nadal 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ę bash, możesz uruchomić następujące polecenie. Spowoduje to skasowanie zawartości pliku .bash_history twojego konta użytkownika:
historia -c
Bash domyślnie zapamiętuje ograniczoną liczbę poleceń, co zapobiega zbyt dużemu powiększaniu się pliku historii. Liczba wpisów w historii wpisów bash jest kontrolowana przez HISTSIZE
zmienna. Wartością domyślną jest zwykle 500 lub 1000 wpisów. Możesz uruchomić następujące polecenie, aby wyświetlić rozmiar historii bash w systemie.
echo $ HISTSIZE
Aby ustawić historię na zero, uruchom następujące polecenie.
HISTSIZE = 0
W bieżącej sesji bash nie przechowuje żadnych wpisów historii, chyba że uruchomisz takie polecenie jak HISTSIZE = 1000
aby przywrócić określoną liczbę wpisów.
Bash pozwala ignorować wpisy historii, które zaczynają się spacją, jeśli ustawisz HISTCONTROL
zmienna na ignorespace.
HISTCONTROL = ignorespace
Wpisz spację przed poleceniem przed uruchomieniem go w powłoce bash, a polecenie uruchomi się 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 opcję uruchamiania poleceń bez wyświetlania ich w historii.
Bash pozwala także ignorować zduplikowane polecenia, które mogą zaśmiecać twoją historię. Aby to zrobić, ustaw HISTCONTROL
do ignorowane.
HISTCONTROL = ignoredups
Aby użyć obu ignorespace
i ignorowane
funkcja, ustaw HISTCONTROL
zmienna na ignoreboth.
HISTCONTROL = ignoreboth
Zauważ, że ustawione zmienne bash będą obowiązywały tylko dla bieżącej sesji. Musisz je dodać do pliku .bashrc Twojego konta użytkownika, aby te wartości były automatycznie ustawiane podczas każdej rozpoczętej sesji bash, jeśli wolisz.
Powłoka bash to złożone narzędzie z wieloma opcjami. Zapoznaj się z sekcjami Wbuduj historię i rozbudowę historii w oficjalnej instrukcji basha, aby uzyskać bardziej szczegółowe informacje i inne zaawansowane triki, których możesz użyć.