Jak zrobić bash (Terminal.app) pamiętając historię poprzednich sesji?

11

W moim komputerze w mojej powłoce bash zapamiętuje historię z poprzednich sesji, nawet jeśli właśnie otworzyłem nowy terminal.
W moim komputerze w domu tak się nie dzieje.
Mam ten sam system operacyjny 10.6.8 w obu komputerach i nie mam żadnych ustawień związanych z historią .bash_profile.
Jak mogę ustawić to na moim komputerze domowym, aby zapamiętał historię podczas sesji?

Petruza
źródło
Zapytany również w superuser.com/q/421544/4714
glenn jackman

Odpowiedzi:

10

Musisz powiedzieć bash, gdzie zachować plik historii, i ile linii zachować:

# Set the location of your HISTFILE
echo "export HISTFILE=/Users/<USERNAME>/.bash_history" >> ~/.bash_profile

# Number of lines to keep (1000 in this example)
echo "export HISTFILESIZE=1000" >> ~/.bash_profile

# Set how many commands to keep in the current session history list
echo "export HISTSIZE=80" >> ~/.bash_profile

# Ignore commands that start with a space
echo "export HISTIGNORE=\"&:[ ]*:exit\"" >> ~/.bash_profile
Aaron Lake
źródło
3
To powinno być domyślnie niepotrzebne. Domyślna konfiguracja basha (przynajmniej w systemie Mac OS X) włącza historię poleceń.
Chris Page
Słowo kluczowe, / powinno /. Jeśli nie jest to historia nagrywania, zmusi to bash do zachowania historii na init.
Aaron Lake
2
Nie tylko powinien , ale będzie o ile nie zrobiono czegoś, aby stłumić domyślne zachowanie historii, w takim przypadku po prostu zatrzaskiwanie niektórych wartości w tych zmiennych jest jedynie tapetowaniem rzeczywistego problemu. Jeśli ta odpowiedź rozwiąże problem, to coś innego jest naprawdę popsute i powinno zostać naprawione, aby uniknąć innych problemów.
Chris Page
4

Właśnie odkryłem, że mam podobny problem, chociaż mój pracodawca ma tylko dwa komputery Mac i żaden z nich nie pracuje mój biurko. Niedopuszczalne, ale bitwa na inny czas.

W każdym razie w domu Mac Mini (migrowany z MacBooka Pro) nie współpracował nawet po ustawieniu .bashrc i / lub .profile. Wtedy odkryłem, że moja ~/.bash_history plik był w tajemniczy sposób własnością roota. Musiałem to zrobić:

sudo -iu root
cd ~(myusername)
chown (myusername) .bash_history

(Tak, wiem, że można to zrobić za pomocą mniejszej liczby poleceń. Habit.)

Potem opuściłem Terminal i uruchomiłem nowy. Woot! Wszystkie historie utracone wcześniej wróciły z powrotem. Jak miło.

Prawdopodobieństwo, że ktokolwiek to przeczyta, przypadkowo postawiło się w tej sytuacji: 0,2%. Jestem pewien, że zepsułem to, kiedy gorliwie „naprawiałem” coś innego.

kelvin0mql
źródło
2
Żaden z powyższych komentarzy nie zadziałał dla mnie, ale ten zrobił!
iceui2
4

Miałem ten problem i to, co dla mnie działało, to stworzenie pliku o nazwie .bash_sessions_disable w moim folderze użytkownika ( ~/ ).

Zasadniczo OS X tworzy pliki historii .bash_sessions folder dla każdej sesji (w moim przypadku po jednym dla każdej karty). A nawet poprawnie zamykając te sesje, OS X nie odtwarza historii .bash_history.

Tworzenie .bash_sessions_disable wyłączasz to zachowanie.

touch ~/.bash_sessions_disable
Kleber Kihara
źródło
Wyłączenie historii poleceń na sesję - zachowanie domyślne - jest przeciwieństwem tego, o co pytamy.
Chris Page
@ChrisPage To jest poprawne tylko wtedy, gdy pytający pyta o historie na sesję, co nie wydaje się być przypadkiem („zapamiętaj historię w różnych sesjach”). Wyłączanie zachowania sesji bash ENABLES odtwarzanie pojedynczej historii w .bash_history zamiast utrzymywać historię pod .bash_sessions/ teczka. To jest poprawna odpowiedź imho.
Matt H
@MattH Pytanie zadaje, jak przywrócić działanie historii, ponieważ wydaje się, że w ogóle nie działa, a wyłączenie tej funkcji historii sesji nie idzie w dobrym kierunku. Jeśli występuje błąd w mechanizmie historii sesji, ktoś powinien zgłosić błąd, ale przedstawiając odpowiedź, jakby wyłączenie go było w jakiś sposób poprawne dla wszystkich użytkowników… jest niepoprawne. Zwykle działa dobrze. Zobacz moje komentarze na temat różnych odpowiedzi, aby uzyskać więcej informacji.
Chris Page
Powinienem był również wspomnieć o tym, kiedy początkowo komentowałem: wyłączenie całego mechanizmu zapisywania / przywracania bashu ma charakter ostateczny i należy go w miarę możliwości unikać. Możesz po prostu wyłączyć zachowanie historii poleceń na sesję, ustawiając SHELL_SESSION_HISTORY do 0, zgodnie z dokumentacją /etc/bashrc_Apple_Terminal.
Chris Page
1

Ta odpowiedź z tego Wątek Reddit uratował mnie:

Prawdopodobnie jest to RVM uniemożliwiający uruchomienie „haka” dla sesji bash. Jeśli skomentujesz następujący wiersz w pliku .bash_profile, powinien on działać.

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
noio
źródło
0

Miałem też podobny problem, nie odnotowano żadnej historii. Podane rozwiązania nie zadziałały, ale w końcu dowiedziałem się, że problem jest tak prosty, jak brakująca .bash_history

Rozwiązaniem było pójść do /home/[username]/ i dodaj plik .bash_history, więc

nano .bash_history

a następnie wpisz cokolwiek w pliku (w przeciwnym razie nie zostanie utworzony), wyjdź i zapisz. Po tym historia zaczęła normalnie funkcjonować.

Fabian
źródło
Jeśli to rozwiąże problem, coś innego jest błędne i powinno zostać naprawione, aby uniknąć innych problemów. Jeśli uruchomisz Bash, gdy nie ma pliku historii, utworzy go. Jeśli nie próbuje go utworzyć lub nie może go utworzyć, jest coś nie tak z niektórymi skryptami uruchamiania powłoki lub uprawnieniami do katalogu domowego. Na przykład zobacz odpowiedź: apple.stackexchange.com/a/118764/6883
Chris Page