Ogni volta che apro una nuova istanza di un terminale, la cronologia è vuota. Perché? Devo impostare qualcosa? In bash, tuttavia, non è necessario.
Ogni volta che apro una nuova istanza di un terminale, la cronologia è vuota. Perché? Devo impostare qualcosa? In bash, tuttavia, non è necessario.
Risposte:
Bash e zsh hanno impostazioni predefinite diverse. Zsh non salva la cronologia in un file per impostazione predefinita.
Quando si esegue zsh senza un file di configurazione, viene visualizzata un'interfaccia di configurazione. In questa interfaccia di configurazione, selezionare
(1) Configure settings for history, i.e. command lines remembered
and saved by the shell. (Recommended.)
quindi rivedere le impostazioni proposte e selezionare
# (0) Remember edits and return to main menu (does not save file yet)
Ripetere l'operazione per gli altri sottomenu per (2) completamento, (3) combinazioni di tasti e (4) opzioni, quindi selezionare
(0) Exit, saving the new settings. They will take effect immediately.
dal menu principale.
Le impostazioni relative alla cronologia consigliate sono
HISTFILE=~/.histfile
HISTSIZE=1000
SAVEHIST=1000
setopt appendhistory
Vorrei usare un nome diverso per il file di cronologia, per indicare che è il file di cronologia di zsh. E 1000 linee possono essere aumentate su un sistema moderno.
HISTFILE=~/.zsh_history
HISTSIZE=10000
SAVEHIST=10000
setopt appendhistory
Queste linee vanno dentro ~/.zshrc
, a proposito.
Mentre la risposta esistente è corretta, ho pensato che valesse la pena aggiungere che forse c'è un'opzione migliore rispetto appendhistory
al salvataggio della cronologia e questo è vero SHARE_HISTORY
.
Dai documenti SHARE_HISTORY
"importa entrambi i nuovi comandi dal file della cronologia e fa sì che i comandi digitati vengano aggiunti al file della cronologia". Ciò significa che anche le shell sono consapevoli della vicenda senza dover chiudere quella attuale o aprirne una nuova.
Quindi, tutti insieme lo avresti impostato in questo modo:
HISTFILE=~/.zsh_history
HISTSIZE=10000
SAVEHIST=1000
setopt SHARE_HISTORY
INC_APPEND_HISTORY_TIME
, che scrive nella cronologia da tutti i terminali come sopra, ma quella cronologia "non sarà immediatamente disponibile da altre istanze della shell che utilizzano lo stesso file cronologico". Questo ha più senso per me, perché poi posso attraversare la storia di ciascun terminale in modo indipendente, ma è ancora tutto registrato.
INC_APPEND_HISTORY_TIME
potrebbe avere più senso logico. Probabilmente non avrei dovuto dire "meglio", immagino sia solo una questione di preferenze personali a questo punto!
quando passi da bash a zsh per la prima volta, la cronologia di bash non verrà trasferita. Quindi tutta la cronologia che hai avuto in bash è ancora nel file cronologico di bash. zsh inizia a catturare la cronologia dal momento in cui inizi a usarla come shell.
Se non è stato impostato per acquisire la cronologia, è possibile rieseguire la procedura guidata di configurazione e dire a zsh quanta cronologia salvare. O cambia il nome di ~ / .zshrc o cancellalo per ottenere un nuovo scatto nella procedura guidata.
Se non funziona e hai già tutto questo a posto, prova:
fc -W
Questo scrive la cronologia corrente nel file della cronologia. E se ottieni:
zsh: locking failed for /home/username/.zsh_history: permission denied
allora è il momento di controllare le autorizzazioni sul file e sulla directory padre.
zsh
, ma per impostazione predefinitabash
scrive nei suoi file di cronologia all'uscita , il che significa che se non l'hai mai usato prima e hai aperto alcune shell, tutti mostreranno ora la cronologia fino a quando almeno uno si disconnette, scrivendo così il suo file di cronologia.