Jak mogę przeszukać historię basha i powtórzyć polecenie?
Czy mogę wyszukać historię w bashu i uruchomić wynik?
Czy mogę wyszukać historię w bashu i uruchomić wynik?
Jako alternatywę dla crtl+R, możesz przeszukać historię wpisując
!text
To przeszuka historię w poszukiwaniu ostatniego polecenia rozpoczynającego się od ‘text’.
Ale sugeruję, abyś umieścił to w swoim .bashrc, aby zapobiec wykonaniu błędnej komendy.
shopt -s histverify
To instruuje bash tak, że po jakichkolwiek działaniach w historii (jak !!:s/prev_text/after_text
), umieszcza wynikowy wiersz w wierszu poleceń. Można wtedy przejrzeć lub edytować polecenie, a następnie nacisnąć Enter.
Wolę używać history-search-backward niż reverse-search-history. Ten pierwszy pozwala na wpisanie kilku znaków polecenia potem wciśnięcie klawisza szukania, w przeciwieństwie do wciśnięcia najpierw klawisza szukania, a potem wpisania szukanego łańcucha.
Domyślnie w moim systemie, M-p i M-n przypisane są do podobnych funkcji, ale ja wolę przypisać je do klawiszy strzałek:
bind '"\e[A":history-search-backward'
bind '"\e[B":history-search-forward'
Świetny opis, Sean! Umieściłbym to w komentarzu, ale brakuje mi kilku punktów reputacji :-)
Inną powiązaną i użyteczną techniką jest możliwość uruchomienia poprzedniego polecenia podczas zmiany słowa. Powiedzmy, że popełniłeś literówkę w nazwie katalogu, lub chcesz zmienić nazwę pliku:
$ echo my name is bob my name is bob $ ^bob^jordan echo my name is jordan my name is jordan
Zauważ, że polecenie jest interpretowane, zastępowane i wypisywane przed jego wykonaniem, więc jeśli zostanie wykonane niewłaściwe polecenie, możesz zobaczyć, co bash myślał, że robi.
Ponieważ nawigacja po historii za pomocą Ctrl-r jest IMO kłopotliwa, warto rozważyć hh : https://github.com/dvorka/hstr
co czyni nawigację znacznie prostszą, bezpośrednią i efektywną - włączając w to uruchomienie polecenia:
W wierszu poleceń basha, wpisz control-R, następnie wpisz kilka znaków żądanego polecenia, a funkcja readline basha przeszuka historię poleceń w poszukiwaniu tego polecenia.
Po rozpoczęciu szukania, możesz ponownie wpisać control-R, aby przejść do następnego pasującego polecenia.
Jeśli masz swoją powłokę skonfigurowaną do używania przypisań klawiszy vi
(set -o vi
lub set editing-mode vi
w $HOME/.inputrc
), to wyszukujesz przy pomocy <Esc>/some-command<Return>
i uderzasz n
(następny) lub Shift-n
(poprzedni), aby cyklicznie przeglądać historię wiersza poleceń.
Lubię HSTR, ale czasami nie mogę go zainstalować. Napisałem więc alias używając fzf , który naśladuje jego zachowanie (hx
, dla “history execute”)
alias hx='eval $(history | sed "s/^ *[0-9]* *//g" | fzf --tac --tiebreak=index --height=10)'
history
: cóż, pobierz historię sed
: usuń kolumnę numeryczną z listy (POSIX) fzf
: tu jest magia, pozwala na interaktywne przeszukiwanie listy, lub poruszanie się z C-J
i C-K
, a następnie wykonanie polecenia z Enter
. --height
: ustawia liczbę wyświetlanych linii. --tac
: odwróć listę (bardziej logiczne dla historii) --tiebreak=index
: zachowaj kolejność historii, gdy fzf uaktualnia wyniki