Czy mogę przeszukać historię w bashu i uruchomić wynik?
Wpisz Ctrl Rw wierszu polecenia i zacznij wpisywać poprzednie polecenie. Gdy pojawi się wynik, uderzaj dalej, Ctrl Raby zobaczyć inne mecze. Gdy pojawi się żądane polecenie, po prostu naciśnijEnter
Pamiętaj, że while Ctrl Rjest ustawieniem domyślnym, jeśli chcesz reverse-search-history
powiązać polecenie ( ), Ctrl Tmożesz to skonfigurować w następujący sposób:
powiązanie „\ Ct”: historia wyszukiwania wstecznego
Dostępnych jest również wiele innych możliwych do powiązania poleceń readline. Spójrz na bash
stronę podręcznika .
Bash ma wiele możliwości wyszukiwania i dostępu do interaktywnej historii poleceń. Najbardziej podstawowym z nich jest history
wbudowany. Wpisując tylko:
$ historia
Wyświetli listę poleceń wraz z indeksem liczbowym, np .:
$ historia 1 czysty 2 ls -al 3 vim ~ / somefile.txt 4 historia $
Możesz następnie wykonać dowolne z tych poleceń, używając ich indeksu numerycznego, zastępując indeks jednym !
, jak zauważył Mitch :
$ 1
Wykona clear
polecenie. Wbudowana historia ma wiele funkcji, więcej można zobaczyć na stronach man bash
i history
.
Możesz również określić względne ujemne przesunięcia podczas używania !
desygnatora, więc korzystając z naszej listy historii powyżej, jeśli chcielibyśmy wykonać vim
ponownie, moglibyśmy:
$! -2
Co w zasadzie mówi bashowi, aby wykonał polecenie, które wykonałeś „dwa polecenia temu”. Aby uruchomić poprzednie polecenie z listy historii, możemy po prostu użyć !!
(co jest po prostu skrótem !-1
).
!
Oznacznik nie ogranicza Ci numerycznie określające, które polecenie do uruchomienia. Hayalci pokazał, że możesz poinstruować, bash
aby wykonać polecenie na podstawie tekstu, od którego zaczyna (użycie !
) lub tekstu w samym poleceniu (użycie !?
). Ponownie, korzystając z naszej przykładowej listy historii powyżej, jeśli chcemy clear
ponownie wykonać , wystarczy wpisać:
$! cl
i naciśnij Enter. A co vim
? To jest tak proste jak:
$!? niektóre
Najważniejszym punktem odpowiedzi Hayalci jest wezwanie do shopt
wbudowanego:
$ shopt -s histverify
Umożliwi to weryfikację historię tak, że polecenia, które są dopasowane przez !
, !!
oraz !?
Oznaczenia nie są ślepo wykonywane, lecz wypełnione w linii poleceń, dzięki czemu można zapewnić zrobią nic złego przed ich wykonaniem. Jest to jeszcze ważniejsze, gdy wykonujesz polecenia jako użytkownik root. Tę opcję można ustawić w .bashrc
pliku startowym, aby była ustawiona przy każdym logowaniu.
Jak już wspomniano, wszystkie te informacje można uzyskać ze strony podręcznika bash
man . Dla !, !! i!? desygnatorzy, spójrz na sekcję 9.3 Rozszerzenie historii .
shopt
idzie w bashrc, a nie w bash_profile (lub nie zostanie włączony dla powłok, które nie są powłokami logowania).Alternatywnie crtl+Rmożesz przeszukiwać historię, pisząc
Spowoduje to przeszukanie historii najnowszego polecenia zaczynającego się od „text”.
Ale sugeruję, abyś umieścił to w swoim .bashrc, aby zapobiec wykonaniu niewłaściwego polecenia.
To instruuje bash tak, aby po wszelkich historycznych akcjach (jak
!!:s/prev_text/after_text
) umieszczał wynikową linię w wierszu polecenia. Następnie możesz przejrzeć lub edytować polecenie, a następnie naciśnij klawisz Enter.źródło
Możesz także:
zwróciłoby coś takiego
wtedy możesz wpisać
źródło
Wolę używać wyszukiwania historii do tyłu niż wyszukiwania wstecz. Pierwszy z nich pozwala wpisać kilka znaków polecenia, a następnie nacisnąć klawisz wyszukiwania, zamiast naciskać klawisz wyszukiwania, a następnie wpisywać szukany ciąg.
Domyślnie w moim systemie Mp i Mn wiążą się z podobnymi funkcjami, ale wolę powiązać klawisze strzałek:
źródło
Mam naprawdę świetny alias, h. To tak naprawdę „historia | grep”, ale odfiltrowuję poprzednie wpisy „h polecenia” za pomocą „grep -E -v”
używane jak
źródło
HISTIGNORE
.Doskonałe napisanie, Sean! Umieściłbym to w komentarzu, ale brakuje mi kilku punktów reputacji. :-)
Inną powiązaną i przydatną techniką jest możliwość uruchomienia poprzedniego polecenia podczas zmiany słowa. Powiedzmy, że wpisałeś nazwę katalogu lub chcesz zmienić nazwę pliku:
Zauważ, że polecenie zostało rozwinięte, zastąpione i wypisane przed uruchomieniem polecenia, więc jeśli uruchomione zostanie niewłaściwe polecenie, możesz zobaczyć, co bash myślał.
źródło
Ponieważ nawigacja w historii za pomocą Ctrl-r jest uciążliwa dla IMO, warto rozważyć hh :
https://github.com/dvorka/hstr
co sprawia, że nawigacja jest znacznie prostsza, bezpośrednia i wydajna - w tym uruchomienie polecenia:
źródło
ctrl + r
teraz domyślnieW wierszu polecenia bash wpisz control-R, a następnie wpisz kilka znaków żądanego polecenia, a funkcja readline bash przeszuka historię poleceń dla tego polecenia.
Po rozpoczęciu wyszukiwania możesz ponownie wpisać control-R, aby przejść do następnego pasującego polecenia.
źródło
Jeśli twoja powłoka skonfigurowany do korzystania z
vi
klawiszy (set -o vi
lub mającyset editing-mode vi
w$HOME/.inputrc
), a następnie szukać z<Esc>/some-command<Return>
mocnon
(NEXT) lubShift-n
(poprzedni) do cyklu przez historię wiersza poleceń.źródło
CTRL+ Rdziała dobrze, jak sugerował @ John1024, ale jest nieco nudne, jeśli wiele z ostatnich poleceń jest podobnych i chcesz szybko przeskanować je wszystkie. Alternatywą byłoby użycie
history
:źródło
Lubię HSTR, ale czasami nie mogę go zainstalować. Napisałem więc alias przy użyciu fzf, który naśladuje jego zachowanie (
hx
dla „historii wykonania”)history
: cóż, poznaj historięsed
: usuń kolumnę liczb z listy (POSIX)fzf
: oto magia, pozwala interaktywnie przeszukiwać listę interaktywnie lub poruszać się za pomocąC-J
iC-K
, a następnie wykonać polecenie za pomocąEnter
.--height
: ustaw liczbę wyświetlanych linii.--tac
: przywróć listę (bardziej logiczne dla historii)--tiebreak=index
: zachowaj porządek historii, gdy fzf aktualizuje wynikiźródło