web-dev-qa-db-ja.com

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

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

18
Jodari

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
10
bert

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

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

0
LocoCoyote

それが機能せず、これらすべてがすでに整っている場合は、以下を試してください。

fc -W

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

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

次に、親ディレクトリのファイルandの権限を確認します。

0
Chris Snyder