Lubię przechowywać dużo historii, więc histappend
postanowiłem .bashrc
. Przez większość czasu wszystko działa dobrze, a historia składa się z wielu dołączonych powłok. Jednak co jakiś czas uruchamiam nową powłokę i stwierdzam, że straciłem całą historię - i często zawiera tylko niektóre polecenia z ostatniej powłoki do wyjścia (tj. Nie jest to tylko nadpisywanie zamiast dodawania ). Z tego powodu jestem podejrzany, że dzieje się to przy wyjściu z powłoki, a nie z innego procesu powodującego zabicie .bash_history
pliku. Popierając ten wniosek, mam numery poleceń w historii i nigdy nie widziałem, żeby spadały.
Czy ktoś miał kiedyś podobny problem? A może po prostu masz sugestie, jak wyśledzić problem?
Odpowiedzi:
Przepraszam, że odpowiadam na własne pytanie, ale żadna z pozostałych odpowiedzi tak naprawdę nie rozwiązuje problemu.
W końcu doszedłem do wniosku, że dzieje się tak tylko podczas zamykania
gnome-terminal
się (tj. File> exit, przycisk „x”, alt + F4), a nawet wtedy ogólnie tylko przy zamykaniu kilku terminali w krótkim odstępie czasu. Nigdy nie zdarza się to, gdy używasz Ctrl-D do zamykania powłoki, pozwalając terminalowi podążać.Jeśli uda mi się go odpowiednio sprecyzować, prześlę raport o błędzie terminalu gnome. Tymczasem być może pomoże to innym osobom, które dostaną się tutaj z Google!
źródło
Nie mam pojęcia, dlaczego tak się dzieje, ale być może uda ci się obejść problem, zmuszając bash do zapisywania pliku historii za każdym razem, gdy wyświetla monit:
Spowoduje to zapisanie (-a), a następnie ponowne odczytanie (-n) pliku historii za każdym razem, gdy bash poprosi o następne polecenie. Dodatkowa korzyść: otrzymasz polecenie X w powłoce 1 w historii powłoki 2.
źródło
history -n
jest łuszcząca się. Jest to bardziej niezawodnehistory -a; history -c; history -r
. Aby to wyjaśnić, najpierw zauważę, żehistory -a
robi to dobrze -.bash_history
będzie zawierać wszystkie twoje polecenia, które wpisałeś, w kolejności, w jakiej je wpisałeś - przy założeniu, że wykonujeszhistory -a
po każdym poleceniu. Wyzwanie polega na zsynchronizowaniu pomysłu historii powłoki z plikiem .bash_history. Jest to łatwe-c
i-r
problem polega na tym, że może być powolny, jeśli jest duży.-n
może się zepsuć, ponieważ nieprawidłowo określa, które linie są nowe. (Brakuje mi tutaj miejsca!)-n
) Wyobraź sobie, że wykonanie polecenia w skorupkach 1:ls
. Następnie w innej powłoce, Shell Two, wykonujeszcd
. Teraz historia w .bash_history jest poprawna, ponieważhistory -a
w twoimPROMPT_COMMAND
- będzie zawieraćls \n cd \n
. Następnie wróć do powłoki One i wpiszpwd
. Shell One uważa , że było tylko polecenie w historii (ls
). Teraz uważa, że w historii są dwa polecenia (ls
ipwd
). Gdy to zrobisz-n
, myśli (mam dwie komendy w mojej historii, a w .bash_history są dwie komendy, dlatego jestem na bieżąco.)Z mojego doświadczenia wynika, że powłoki zaktualizowały plik historii w momencie wyjścia. Tak więc początkowa „historia” powłoki zależała od ostatnio opowiedzianego przez nią widoku historii.
Wynikiem tego jest to, że możesz otrzymywać polecenia przychodzące i wychodzące z historii, w zależności od tego, jak uruchomiono i zatrzymano inne powłoki.
źródło
histappend
. Problemem nie są nieoczekiwane treści, ale całkowita utrata wcześniej zapisanych treści.Widziałem to wcześniej, ale był to problem z błędami dysku, które pojawiały się coraz częściej. Uruchomiłbym skan na dysku. Jeśli okaże się, że dysk jest w porządku, sprawdziłbym, czy ten plik nie przekracza arbitralnego limitu historii powłoki.
Coś, co mogłoby temu zapobiec, polegałoby na ponownym przycinaniu pliku z powrotem do 80 wierszy lub dowolnej liczbie poleceń, jakie powinna mieć historia.
źródło
int
basha, w którym je przechowują.