Zawsze używałem bash do pracy i nigdy nie miałem z tym problemów. Teraz nie zapisuje ponownie żadnego polecenia w historii. Jeśli otworzę okno terminalu, wypróbuję kilka poleceń, działa to tak, jakby wszystko działało dobrze i pokazuje mi historię za pomocą klawiszy strzałek. Ale jeśli zamknę okno (i że jest to czas, który powinien być zapisany w pliku .bash_history) i otworzę kolejne, nie będzie śladów ostatnich poleceń.
Jak mogę dowiedzieć się, co się dzieje? Lub zresetuj wszystko od zera.
.bash_sessions_disable
i wiem, że powraca do domyślnego zachowaniaOdpowiedzi:
Ja to zrobiłem:
Dodaj zmienną do
.bash_profile
plikuSHELL_SESSION_HISTORY=0
zrestartuj terminal, a potem będzie działał tak, jak bym chciał. (Zapisał polecenia po zamknięciu terminala)
PS Używam również zmiennych
HISTFILESIZE
iHISTSIZE
HISTSIZE to liczba wierszy lub poleceń przechowywanych w pamięci na liście historii podczas trwającej sesji bash.
HISTFILESIZE to liczba wierszy lub poleceń, które (a) są dozwolone w pliku historii podczas uruchamiania sesji i (b) są przechowywane w pliku historii na końcu sesji bash do wykorzystania w przyszłych sesjach.
źródło
Począwszy od systemu OS X 10.11 El Capitan , skrypt instalowany w systemie
/etc/bashrc_Apple_Terminal
koordynuje z terminalem w celu zapisania / przywrócenia osobnych historii poleceń dla każdego terminalu przywróconego do wznowienia .Przeczytaj komentarze w
/etc/bashrc_Apple_Terminal
celu wyjaśnienia, w jaki sposób zarządza historią poleceń dla poszczególnych terminali i jak ją dostosować.Jeśli dostosujesz,
PROMPT_COMMAND
pamiętaj o połączeniu z poprzednią wartością, aby nie wyczyścić polecenia dostarczonego przez system:Jeśli zainstalujesz moduł
EXIT
obsługi sygnałów,trap
pamiętaj, aby zrobić coś podobnego (lub wywołać shell_session_update od swojego modułu obsługi, jeśli nie możesz dowiedzieć się, jak połączyć z poprzednią wartością - jest to trochę zaangażowane).Po wyjściu z powłoki ten kod zapisze nowe polecenia w historii terminala w
~/.bash_sessions
. Aby sprawdzić, czy napotka jakieś problemy, zamiast zamykać terminal ręcznie wyjdź z powłoki ręcznie za pomocąexit
(lub Control-D). Rejestruje komunikaty o postępach. Zwróć uwagę, że nie zostanie ukończony lub jeśli zostaną wyświetlone jakiekolwiek ostrzeżenia lub komunikaty o błędach.Ogólnie rzecz biorąc,
bashrc_Apple_Terminal
próbuje wykryć i wyłączyć historię poszczególnych sesji, jeśli wygląda na to, że użytkownik wykonał wszelkie dostosowania, które nie są z nią zgodne. Wygląda na to, że znalazłeś taki, którego nie obsługuje. Proszę rozważyć zgłoszenie błędu w Apple: https://developer.apple.com/bug-reporting/źródło
/etc/bashrc_Apple_Terminal
służy PROMPT_COMMAND?”? Jeśli to drugie, odsyłam do kodu, który jest szczegółowo udokumentowany. Lub powinieneś rozpocząć kolejne pytania na ten temat.Tylko w przypadku, istnieją inne, które obecnie nie mają RVM (Ruby Version Manager) zainstalowane: Sprawdź, czy masz następujący wiersz w swoim
~/.profile
,~/.bashrc
lub~/.bash_profile
plików.[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
To był dla mnie problem. Spróbuj to skomentować.
Źródło: Reddit
źródło
W nowej instalacji Mac OS X (zaktualizowanej do 10.13.6) historia poleceń bash nie była zapisywana. Nie było również plików .bashrc ani .bash_profile. W tym przypadku po prostu dodanie pustego pliku .bashrc naprawiło go.
To chyba wszystko, czego potrzebujesz ...
źródło
Miałem ten sam problem z nowo zainstalowanym systemem OSX Mojave. Sprawdziłem mój
~/.bash_history
plik i zobaczyłem to:$ ls -l ~/.bash_history -rw------- 1 root staff 599 Jan 4 20:50 /Users/gilm/.bash_history
Po prostu odesłanie go z powrotem do gilm rozwiązało problem. Użyłem:
sudo chown gilm /Users/gilm/.bash_history
i to rozwiązało mój problem.
źródło
Możesz także utworzyć
.bash_logout
plik z następującymi elementami:Pozyskane z komentarza GitHub
źródło
trap shell_session_update EXIT
raz i wyloguj się. W/etc/bashrc_Apple_Terminal
skrypcie znajdują się wskazówki, które są zbyt nudne, aby je tutaj uwzględnić.