履歴はzshに保存されません


16

端末の新しいインスタンスを開くたびに、履歴が空になります。何故ですか?何かセットアップする必要がありますか?ただし、bashではこれは必要ありません。


はわかりませんzshが、デフォルトでbash終了時に履歴ファイルに書き込みます。つまり、以前に使用せずにいくつかのシェルを開いた場合、少なくとも1つがログアウトするまですべての履歴が表示され、履歴ファイルに書き込まれます。
DopeGhoti 2017

回答:


24

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ちなみに、これらの行はに入ります。


8

既存の答えは正しいですがappendhistory、履歴を保存するよりも優れたオプションがある可能性があることを付け加える価値があると思いましたSHARE_HISTORY。これはです。

ドキュメントからSHARE_HISTORY「両方とも履歴ファイルから新しいコマンドをインポートし、入力したコマンドを履歴ファイルに追加します」。つまり、シェルは、現在のシェルを閉じたり、新しいシェルを開いたりすることなく、互いの履歴を認識します。

まとめると、次のように設定します。

HISTFILE=~/.zsh_history
HISTSIZE=10000
SAVEHIST=1000
setopt SHARE_HISTORY

1
+1とU / Lへようこそ。ただし、個人的にはINC_APPEND_HISTORY_TIME、上記のようにすべての端末から履歴に書き込みますが、その履歴は「同じ履歴ファイルを使用しているシェルの他のインスタンスからはすぐには利用できません」。これは、各端末の履歴を個別にトラバースできるため、私にはより理にかなっていますが、それでもすべてログに記録されます。
スパラフーク

2
ありがとう!ええ、それは十分に公正であり、なぜINC_APPEND_HISTORY_TIMEより論理的な意味があるのか​​を完全に理解できます。おそらく「もっと良い」と言ってはいけなかったでしょう。現時点では個人の好みの問題だと思います。
バート

0

最初にbashからzshに切り替えたとき、bashの履歴は引き継がれません。そのため、bashにあった履歴はすべてbashの履歴ファイルに残っています。zshは、シェルとして使用を開始した時点から履歴のキャプチャを開始します。

履歴をキャプチャするように設定しなかった場合は、構成ウィザードを再実行して、保存する履歴の量をzshに指示できます。〜/ .zshrcの名前を変更するか削除して、ウィザードで新しいショットを取得します。


0

動作しておらず、これらのすべてが既に適切に設定されている場合は、次を試してください。

fc -W

これにより、現在の履歴が履歴ファイルに書き込まれます。そして、あなたが得るなら:

zsh: locking failed for /home/username/.zsh_history: permission denied

次に、ファイル親ディレクトリのアクセス許可を確認します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.