Ilekroć otwieram nową instancję terminala, historia jest pusta. Dlaczego? Czy muszę coś skonfigurować? Jednak w bash nie ma takiej potrzeby.
Ilekroć otwieram nową instancję terminala, historia jest pusta. Dlaczego? Czy muszę coś skonfigurować? Jednak w bash nie ma takiej potrzeby.
Odpowiedzi:
Bash i zsh mają różne ustawienia domyślne. Zsh domyślnie nie zapisuje historii w pliku.
Gdy uruchomisz zsh bez pliku konfiguracyjnego, wyświetli się interfejs konfiguracyjny. W tym interfejsie konfiguracyjnym wybierz
(1) Configure settings for history, i.e. command lines remembered
and saved by the shell. (Recommended.)
następnie przejrzyj proponowane ustawienia i wybierz
# (0) Remember edits and return to main menu (does not save file yet)
Powtórz te czynności dla pozostałych podmenu dla (2) zakończenia, (3) skrótów klawiszowych i (4) opcji, a następnie wybierz
(0) Exit, saving the new settings. They will take effect immediately.
z menu głównego.
Zalecane ustawienia związane z historią to
HISTFILE=~/.histfile
HISTSIZE=1000
SAVEHIST=1000
setopt appendhistory
Użyłbym innej nazwy dla pliku historii, aby wskazać, że jest to plik historii zsh. W nowoczesnym systemie można zwiększyć 1000 linii.
HISTFILE=~/.zsh_history
HISTSIZE=10000
SAVEHIST=10000
setopt appendhistory
Nawiasem ~/.zshrc
mówiąc, te linie wchodzą .
Chociaż istniejąca odpowiedź jest poprawna, pomyślałem, że warto dodać, że istnieje prawdopodobnie lepsza opcja niż appendhistory
zapisanie historii i tak jest SHARE_HISTORY
.
Z dokumentów SHARE_HISTORY
„oba importują nowe polecenia z pliku historii, a także powodują, że wpisane polecenia są dołączane do pliku historii”. Oznacza to, że muszle również znają swoją historię bez konieczności zamykania obecnej lub otwierania nowej.
Więc razem ustawilibyście to w ten sposób:
HISTFILE=~/.zsh_history
HISTSIZE=10000
SAVEHIST=1000
setopt SHARE_HISTORY
INC_APPEND_HISTORY_TIME
, który zapisuje historię ze wszystkich terminali jak wyżej, ale ta historia „nie będzie dostępna od razu z innych instancji powłoki korzystających z tego samego pliku historii”. Ma to dla mnie większy sens, ponieważ wtedy mogę osobno przeglądać historię każdego terminala, ale nadal wszystko jest rejestrowane.
INC_APPEND_HISTORY_TIME
może mieć to bardziej logiczny sens. Prawdopodobnie nie powinienem był mówić „lepiej”, myślę, że w tym momencie jest to tylko kwestia osobistych preferencji!
kiedy po raz pierwszy przełączysz się z bash na zsh, twoja historia bash nie zostanie przeniesiona. Więc cała historia, którą miałeś w bash, jest nadal w pliku historii bash. Zsh zaczyna przechwytywać historię od momentu, gdy zaczniesz używać jej jako powłoki.
Jeśli nie skonfigurowałeś go do przechwytywania historii, możesz ponownie uruchomić kreatora konfiguracji i powiedzieć zsh, ile historii zapisać. Zmień nazwę ~ / .zshrc lub usuń ją, aby uzyskać nowe ujęcie kreatora.
Jeśli to nie działa, a masz to wszystko na swoim miejscu, spróbuj:
fc -W
To zapisuje bieżącą historię do pliku historii. A jeśli otrzymasz:
zsh: locking failed for /home/username/.zsh_history: permission denied
nadszedł czas, aby sprawdzić uprawnienia do pliku i katalogu nadrzędnego.
zsh
, ale domyślniebash
zapisuje do swoich plików historii przy wyjściu , co oznacza, że jeśli nie używałeś go wcześniej i nie otworzyłeś niektórych powłok, wszystkie one będą teraz wyświetlać historię, dopóki przynajmniej jeden się nie wyloguje, zapisując w ten sposób swój plik historii.