回答:
Bashとzshのデフォルトは異なります。Zshはデフォルトでは履歴をファイルに保存しません。
設定ファイルなしでzshを実行すると、設定インターフェースが表示されます。この構成インターフェースで、
(1) Configure settings for history, i.e. command lines remembered
and saved by the shell. (Recommended.)
次に、提案された設定を確認して選択します
# (0) Remember edits and return to main menu (does not save file yet)
(2)完了、(3)キーバインド、および(4)オプションのその他のサブメニューについて繰り返し、次に選択します
(0) Exit, saving the new settings. They will take effect immediately.
メインメニューから。
推奨される履歴関連の設定は、
HISTFILE=~/.histfile
HISTSIZE=1000
SAVEHIST=1000
setopt appendhistory
履歴ファイルにzshの履歴ファイルであることを示すために、別の名前を使用します。また、最新のシステムでは1000行を増やすことができます。
HISTFILE=~/.zsh_history
HISTSIZE=10000
SAVEHIST=10000
setopt appendhistory
~/.zshrc
ちなみに、これらの行はに入ります。
既存の答えは正しいですがappendhistory
、履歴を保存するよりも優れたオプションがある可能性があることを付け加える価値があると思いましたSHARE_HISTORY
。これはです。
ドキュメントからSHARE_HISTORY
「両方とも履歴ファイルから新しいコマンドをインポートし、入力したコマンドを履歴ファイルに追加します」。つまり、シェルは、現在のシェルを閉じたり、新しいシェルを開いたりすることなく、互いの履歴を認識します。
まとめると、次のように設定します。
HISTFILE=~/.zsh_history
HISTSIZE=10000
SAVEHIST=1000
setopt SHARE_HISTORY
INC_APPEND_HISTORY_TIME
、上記のようにすべての端末から履歴に書き込みますが、その履歴は「同じ履歴ファイルを使用しているシェルの他のインスタンスからはすぐには利用できません」。これは、各端末の履歴を個別にトラバースできるため、私にはより理にかなっていますが、それでもすべてログに記録されます。
INC_APPEND_HISTORY_TIME
より論理的な意味があるのかを完全に理解できます。おそらく「もっと良い」と言ってはいけなかったでしょう。現時点では個人の好みの問題だと思います。
zsh
が、デフォルトでbash
は終了時に履歴ファイルに書き込みます。つまり、以前に使用せずにいくつかのシェルを開いた場合、少なくとも1つがログアウトするまですべての履歴が表示され、履歴ファイルに書き込まれます。