Rutynowo uruchamiam wiele screen
sesji na komputerach i serwerach z systemem Linux.
Problem polega na tym, że kiedy grep
przeglądam historię poleceń, stwierdzam, że wydałem polecenie w innej sesji i muszę się odłączyć i ponownie dołączyć, aby uzyskać ten element historii.
Czy można „wymusić” różnie zaktualizowane historie z wielu sesji, aby przejść do historii centralnej?
Odpowiedzi:
Musisz zrobić dwie rzeczy:
shopt -s histappend
do swojego.bashrc
. Zostanie to dołączone do pliku historii, zamiast go zastąpić..bashrc
, wstaw,PROMPT_COMMAND="$PROMPT_COMMAND;history -a; history -n"
a plik historii zostanie ponownie zapisany i ponownie przeczytany za każdym razem, gdy bash wyświetli monit.EDYCJA: Dzięki e-t172 za
history -n
lewęźródło
PROMPT_COMMAND
zdefiniowałem wcześniej, więc musiałem użyć,PROMPT_COMMAND="history -a; history -n"
aby uniknąć błędów.Proszę nie używać
history -a; history -n
, nie działa zgodnie z oczekiwaniami i pozostawi wiele zduplikowanych poleceń w historii. Rozwiązanie, które działa ogólnie zgodnie z oczekiwaniami, jest następujące:Użycie nowego wiersza zamiast średnika jest również krótkim sposobem radzenia sobie z brakującym / zduplikowanym problemem średnika za pomocą PROMPT_COMMAND.
źródło
export
nie jest konieczne. Ponieważ należy ustawić opcje interaktywnej powłoki, z~/.bashrc
której jest wywoływana z każdej podpowłoki, więc dziedziczenie nie jest konieczne.PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"
zamiast tego?PROMPT_COMMAND nie jest domyślnie zdefiniowany w niektórych dystrybucjach. Na przykład jest zdefiniowany w Arch, ale nie w Debianie.
Mam bashrc w moim Dropbox, którego używam podczas przeskakiwania dystrybucji, i obejmuje:
źródło
PROMPT_COMMAND="$PROMPT_COMMAND; history -a; history -n"
PROMPT_COMMAND="$PROMPT_COMMAND"$'\n''history -a; history -n'