Użyłem odpowiedzi w /unix//a/1292/41729, aby umożliwić wspólną historię w czasie rzeczywistym pomiędzy oddzielnymi terminalami bash. Jak wyjaśniono w powyższej odpowiedzi, osiąga się to poprzez dodanie:
# avoid duplicates..
export HISTCONTROL=ignoredups:erasedups
# append history entries..
shopt -s histappend
# After each command, save and reload history
export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"
Działa to dobrze, jeśli powłoki bash są oddzielne (np. Otwieranie różnych terminali bash za pomocą CTRL+ALT+T
. Jednak nie działa, jeśli używam tabs
(z otwartego terminala `CTRL + SHIFT + T) zamiast nowych okien. Dlaczego ta różnica w zachowaniu? Jak czy mogę udostępniać historię bash również w różnych zakładkach?
AKTUALIZACJA: Zauważyłem nietypowe zachowanie: jeśli piszę, CTRL+C
to ostatnie polecenie wpisane w dowolnym innym terminalu (zarówno z kartą, jak i bez) jest poprawnie wyświetlane. To tak, jakby CTRL + C wymusił opróżnienie historii, aby następnie została poprawnie udostępniona.
Jako przykład wyjścia (T1 oznacza zacisk 1 i zacisk 2 T2):
T1:
ls -lah <enter>
# the list of files and directory is shown
T2:
cd Documents <enter>
T1:
<up> (i.e. I press the up arrow)
ls -lah #i.e the last command in terminal 1 is shown rather than the last of terminal 2
^C (i.e. I press CTRL+C)
<up>
cd Documents #the last command issued in terminal 2 is correctly displayed
Mam nadzieję, że może to dać jakąkolwiek wskazówkę!
~.bashrc
pliku? Na marginesie, eksport tych zmiennych jest bezcelowy; po prostu marnuje przestrzeń środowiska.