I często otwierają wiele, wiele zacisków [Teraz mam 7 otwarte na tej przestrzeni roboczej] i szukać często history
ze grep
znalezienie polecenia Właśnie napisany niedawno, ale nie chcę, aby dopaść terminal, a następnie przewiń w górę i szukam tego więcej, itp. Czasami moje terminale zamykają się bez „wyjścia”, a wszystko, co napisałem, ginie [Czasem potrzebuję czegoś, co napisałem w terminalu, który został zabity].
Czy istnieje sposób, aby to zrobić, aby każdy terminal natychmiast zapisywał .hash_history? lub przynajmniej raz na minutę, czy coś takiego?
control-r
do wyszukiwania wstecz w historii poleceń jednego basha. Bardziej wygodne niżhistory | grep
chyba, że potrzebujesz wyrażenia regularnego.Odpowiedzi:
Proste rozwiązanie wyszczególnione w Aktualizuj historię Bash w czasie rzeczywistym .
Mówi się, aby umieścić te polecenia w konfiguracji .bashrc:
Pierwsze polecenie zmienia
.history
tryb pliku na dołączanie. A drugi konfigurujehistory -a
polecenie, które będzie uruchamiane przy każdym znaku zachęty powłoki.-a
Natychmiast zapisuje prąd / nowe linie do pliku historii.Powiązane z Zsh:
źródło
Spróbuj umieścić to w
.bashrc
:Kredyt tutaj: https://stackoverflow.com/questions/103944/real-time-history-export-amongst-bash-terminal-windows/3055135
history -c
usuwa historię uruchomionej sesji. Spowoduje to zmniejszenie licznika historii o kwotę$HISTSIZE
.history -r
przeczytaj zawartość$HISTFILE
i włóż je do bieżącej historii uruchomionych sesji. Spowoduje to podniesienie licznika historii o liczbę linii w$HISTFILE
.Myślę, że oznacza to, że polecenia są dostępne niemal natychmiast (masz jeden terminal, pisz
echo 1
, drugi terminalecho 2
, pierwszyecho 3
i po dwukrotnym naciśnięciu strzałki w dół powinieneś miećecho 2
dostęp. Musisz wydać polecenie w danym terminalu, aby mieć dostęp do tego, co ma zostało napisane.źródło
man history
...bash
wbudowane, więc zostało opisane wman bash
. Możesz także użyćhelp history
.-r
a-c
posiadaniem-a
.history -c; history -r
? Wydaje mi się, że to jest lepsze dla ciebie, byłoby lepsze dla mnie tylko czasami, często używam kilku powłok do wykonania jednej pracy, więc wolę mieć jak najwięcej historii. Właściwie mam na myśli, że polecenie zostaje zapisane w historii dopiero po jego zakończeniu. zazwyczaj, kiedy rozpoczynam sesję ssh do jednego hosta i chcę otworzyć kolejną, gdy pierwsza jest jeszcze uruchomiona, muszę ją ponownie wpisać, ponieważ nie została jeszcze zapisana w historii.history -a
może wystarczyćMam duży plik historii z około 100 000 pozycji, a warianty, które usuwają listę historii i czytają cały plik historii (używając
history -c
ihistory -r
) wprowadzają zauważalne (może 0,2 sekundy) opóźnienie przed wyświetleniem monitu. Używaniehistory -n
tak, aby tylko nowe linie były odczytywane z pliku historii, jest szybsze:PROMPT_COMMAND
nie musi być eksportowany, ponieważ jest to zmienna powłoki.źródło
Uwaga do wszystkich innych odpowiedzi (które są w zasadzie to samo):
Ustawienie
PROMPT_COMMAND="history -a;$PROMPT_COMMAND"
w.bashrc
(lub znajomych) wystarczy.Ponadto możesz ręcznie uruchomić,
history -a
gdy chcesz „wykonać migawkę” historii w bieżącej sesji.Polecenie
shopt -s histappend
nie jest potrzebne, ponieważhistory -a
zawsze dodaje nowe wiersze do pliku i nigdy go nie zastępuje. Ponadto, przynajmniej od wersji Bash 4,histappend
zachowanie jest domyślne.źródło
shopt -s histappend
. Zauważ też, że dodałem go do mojego~/.bash_profile
histappend
, ponieważ jest to zachowanie domyślne. Szukałem tego, ale nie mam dostępu do komputera Mac.