Jak mogę zobaczyć historię Bash z więcej niż jednej sesji terminala w Ubuntu? [duplikować]

12

Możliwa duplikat:
Czy pliki historii można zunifikować w bash?

Używam Ubuntu Server 9.10 i chciałbym mieć możliwość zobaczenia mojej historii bash dla więcej niż jednej sesji terminala. To jest moje ostatnie 200 poleceń, nawet jeśli jestem wylogowany pomiędzy nimi.

Kiedy używam, po historyprostu widzę wszystkie polecenia z mojej faktycznej sesji terminala. Jak mogę zobaczyć więcej historii poleceń z Bash? Czy są jakieś specyficzne ustawienia dla bash, które powinienem zmienić od wartości domyślnych w Ubuntu?

Nie mam ~/.bash_historypliku Ale mam ~/.bashrcz HISTCONTROL=$HISTCONTROL${HISTCONTROL+,}ignoredupsiHISTCONTROL=ignoreboth

echo $HISTFILE
/home/sanoj/.bash_history
echo $HISTSIZE
500
echo $HISTFILESIZE
500
echo $HISTCONTROL
ignoreboth

AKTUALIZACJA: Próbuję teraz Ubuntu Server 10.10 w VirtualBox. Jeśli po prostu wyłączę VirtualBox bez polecenia zamykania, to następnym razem, gdy uruchamiam komputer, polecenia z ostatniej sesji nie są zapisywane w pliku historii.

Polecenia są zapisywane tylko wtedy, gdy wyłączę maszynę za pomocą polecenia zamknięcia. Np. Wyłączenie -P 0.

To musi być powód mojego problemu. Muszę więc wymyślić, jak częściej zapisywać historię poleceń. Np. Po każdym poleceniu.

Jonas
źródło
Co otrzymasz, jeśli to zrobisz echo $HISTSIZEi echo $HISTFILESIZE? Mój (Ubuntu) ~/.bashrcma takie same HISTCONTROLlinie jak twój, który jest martwy w mózgu, ponieważ drugi zastępuje pierwszy, a wartości powinny być rozdzielone dwukropkami, a nie przecinkami. Jeśli tak, set -oczy wyświetla wiersz „historia włączona”?
Wstrzymano do odwołania.
I dostać 500się echona obu zmiennych ihistory on
Jonas
otrzymujesz drugą instrukcję HISTCONTROL , a nie pierwszą. chociaż ignoreboth bash skrótem ignoredups + ignorespace tak, że prawdopodobnie nie jest to problem.
quack quixote
1
to jest duplikat: superuser.com/questions/37576/…
warren
1
@warren: ładne znalezisko. Zgadzam się, wygląda dokładnie na to, o co prosi Sanoj.
quack quixote

Odpowiedzi:

7

Możesz użyć

history -a

aby natychmiast dołączyć historię w pamięci do pliku historii. Jedna sesja terminalowa nie widzi innych, chyba że zostanie to zrobione lub druga zostanie zakończona.

Możesz użyć

history 200 | less

aby zobaczyć tę liczbę wpisów.

Oprócz tego HISTSIZEzobacz wpis na stronie podręcznika użytkownika Bash dotyczący HISTFILESIZE.

Wstrzymano do odwołania.
źródło
history -a´ doesn't do anything for me, and not historia 200 | mniej` albo, ale zaktualizowałem swoje pytanie o więcej informacji. W każdym razie dzięki.
Jonas
Myślę, że znalazłem teraz powód. Historia nie zostanie zapisana, chyba że dokonam czystego zamknięcia. Zobacz moje nowe pytanie: unix.stackexchange.com/questions/3330/…
Jonas,
7

Po wylogowaniu historia zostaje dołączona do pliku ~/.bash_history. Zajrzyj tam.

Domyślnie zapamięta 500 ostatnich poleceń. Jeśli chcesz zapisać więcej, ustaw zmienną HISTSIZEw ~/.bashrc.

Dodam też ignoredupsdo HISTCONTROL(z HISTCONTROL=$HISTCONTROL:ignoredup). Powoduje to, że duplikaty kolejnych poleceń są zapisywane tylko raz.

Zobacz, man 1 bashco jeszcze możesz dostroić do historii.

Benjamin Bannier
źródło
Dzięki za odpowiedź. Ale ja nie mam ~/bash_historypliku, a nie HISTSIZEw ~/.bashrcale mam HISTCONTROL=$HISTCONTROL${HISTCONTROL+,}ignoredupsi HISTCONTROL=ignorebothi jest Ubuntu Server, jeżeli sprawa.
Jonas
1
@Snoj Zwróć uwagę .na ~/.bash_history. I do HISTSIZEtego użyje tylko domyślnej wartości 500 wpisów.
Benjamin Bannier
Tak, ale nie mam ~/.bash_historypliku w moim systemie. Kiedyś ls -asprawdzałem.
Jonas
@Sanoj Więc może to nie jest domyślne. Nazwa pliku jest przechowywana w $HISTFILEzmiennej, więc echo $HISTFILEpowie ci, gdzie szukać.
Benjamin Bannier
echo $HISTFILEdaje mi /home/sanoj/.bash_history- dziwne. Może nie jest aktywowany ze względów bezpieczeństwa?
Jonas
1

Historia bash jest zwykle ładowana, gdy powłoka zaczyna działać, i jest zapisywana, gdy jest normalnie zamykana. Możesz użyć history -ai history -nzastąpić to, ale nie automatycznie, chyba że wykorzystasz $PROMPT_COMMANDlub coś podobnego.

Ignacio Vazquez-Abrams
źródło
0

Sanoj, to naprawdę powinno „po prostu działać”; Nie sądzę, że powinno być coś specjalnego, co musisz zrobić, aby to umożliwić. Wygląda na to, że coś zakłóca normalny bieg wydarzeń.

Zajrzałbym do / etc / profile, / etc / bashrc (lub może /etc/bash.bashrc według niektórych źródeł), ~ / .bash_profile, ~ / .bashrc, ~ / .bash_login, ~ / .bash_logout, aby zobaczyć jeśli jest coś, co może mieć wpływ na historię (być może grep -i histw każdym z powyższych plików).

... W szczególności zastanawiam się, czy masz coś w ~ / .bash_logout, które usuwa plik.

Alternatywnie, czy jest możliwe, że coś zastępuje $HOMEzmienną?

Zac Thompson
źródło