Używam głównie Terminatora i zwykle jest on otwierany za pomocą 3 podzielonych okien terminali. Używam również terminala Gnome z różnych powodów.
Zastanawiam się, jak w tym przypadku obsługiwana jest historia bash, ponieważ czasami brakuje mi wcześniej wydanych poleceń podczas uruchamianiahistory
Na przykład mój monit wyświetla bieżącą linię historii bash ( \!
) i jeśli uruchomię Terminator z 3 podzielonymi oknami terminala, otrzymam tę samą linię historii (powiedzmy 100) na wszystkich terminalach. Która historia zostanie zapisana?
Również uruchamiając Gnome Terminal po użyciu Terminatora, dostaję linię 100 przy uruchomieniu, niezależnie od wszystkich poleceń wydanych wcześniej w Terminatorze
command-line
bash
history
zetah
źródło
źródło
Odpowiedzi:
Zapisana sesja bash jest sesją dla terminala, który jest zamknięty najpóźniej. Jeśli chcesz zapisać polecenia dla każdej sesji, możesz skorzystać ze sztuczki opisanej tutaj .
W każdym razie musisz wziąć pod uwagę, że polecenia z różnych sesji będą mieszane w twoim pliku historii, więc później nie będzie tak łatwo je przeczytać.
Zobacz też:
źródło
export PROMPT_COMMAND='history -a; history -r'
i otrzymałem kilka dziwnych numerów linii historii w terminalu - po wydaniu niektórych numerów linii historii poleceń przeskakuje o 2000 zamiast o 1, co jest dziwne, ale zachowuje się tak, jak powiedziano - cała historia terminali zostaje zapisana.export
nie jest potrzebne.Po wielu odczytach
man bash
używam osobnych plików historii dla każdej powłoki. Zrobiłemmkdir -m 0700 ~/.history
wtedy dodanedo mojego
~/.bashrc
. Co jakiś czas pamiętamdu -sk .history
i czyściłem to. Miło jest zachować dla mnie każde wpisane polecenie.Po prostu użyłem powyższego, aby zobaczyć, co ostatnio robiłem:
cut -f1 "-d " .history/* | sort | uniq -c |sort -n -r |less
lub
cut -f1-2 "-d " .history/* | sort | uniq -c |sort -n -r |less
(aby uwzględnić pierwszy argument, np.
sudo mount
W łańcuchu sortowania).źródło
HISTFILESIZE
dwa razy?man bash
.Ctrl+r
ponownego uruchomienia ?egrep 'whatever' .history/*
(lubcat .history/* | egrep 'whatever'
) i Ctrl-r do przeszukiwania historii poszczególnych sesji. Przeczytajman bash-builtins
o poleceniu historii. Mojesort .history/* | uniq -c | sort -n | wc -l
pokazuje 16033 unikalne polecenia,cut '-d ' -f1 .history/* | sort | uniq -c | sort -n
pokazuje 2004 unikalne polecenia, głównie literówki. Załadowanie tego wszystkiego na „listę historii” basha nie pomogłoby.Aby wyświetlić
history
ze wszystkich terminali:Dodaj
export PROMPT_COMMAND='history -a; history -r'
do pliku .bashrc.Źródło: http://northernmost.org/blog/flush-bash_history-after-each-command
źródło
history --merge
. Używam tego od około roku i to rozwiązuje problem. Kiedy chcę najnowszej historii z innych sesji, po prostu uruchamiam to polecenie i jest ono od razu dostępne.Zobacz także „ utrzymywanie trwałej historii w bash ”, aby zobaczyć inną alternatywę. Podpisuje monit o wysłanie wszystkich poleceń wpisanych do dowolnego terminala do pliku „trwałej historii” (wraz z tym, co zwykle robi się dla zwykłego
.history
).źródło
echo $$ $date_part "$command_part" >> ~/.persistent_history
To poprzedza wpisy PID ich procesu bash, abyśmy mogli rozplątać wiele historii.