web-dev-qa-db-ja.com

Zshのコマンド履歴

Zshはコマンド履歴をどのように追跡しますか?

ホームディレクトリに2つのファイルが表示されます:.zhistoryおよび.zsh_history。それらの違いは何ですか?ファイルには私の履歴のallが含まれているようです。 Zshはそれらの1つに行を追加し続けますか無期限?履歴検索が遅くなりすぎませんか?

これらのファイルに別の場所へのシンボリックリンクを安全に作成できますか? (例えば、履歴への変更を追跡するためのgitリポジトリ)

66

Zshは、変数 HISTFILE で示されるファイルに入力行を(おそらく時刻情報とともに)保存します。これは絶対ファイル名である必要があります(それ以外の場合は、現在の現在のディレクトリに関連して解釈されます)。

Zshには、HISTFILEの組み込みのデフォルト値はありません。 zshディストリビューションには、~/.histfileという値が組み込まれた新規ユーザー用のセットアップウィザードが付属しているため、これがzshユーザーがデフォルトで取得するものです。 Oh-my-zshにはHISTFILE=.zhistoryプリセットが付属しています。したがって、デフォルトのセットアップとoh-my-zshの両方でzshを試したようです。 .zshrc(またはファイルの日付)をチェックして、現在使用しているものを確認します。

Zshがファイルを開く方法、つまりシンボリックリンクの場合の動作は、いくつかのオプションによって異なります。

  • オプションのいずれか append_history (デフォルトで設定)、 inc_append_history または share_history が設定されている場合、または履歴がfc -AIで明示的に保存されると、zshは既存のファイルに追加します。
    これらの設定でも、zshは以下に説明するようにファイルを上書きして、サイズを小さくすることがあります。
  • それ以外の場合、オプション hist_save_by_copy が設定されていると(zsh 5.0以降ではデフォルトで設定されていますが、4.2には存在しません)、zshは一時ファイルを書き込み、完了時に一時ファイルを移動します。この場合、履歴ファイルがシンボリックリンクだった場合、新しいファイルがシンボリックリンクを置き換えます。
  • それ以外の場合、zshは既存のファイルを上書きします。

Zshにシンボリックリンクを指定するのではなく、HISTFILEを履歴ファイルを配置する場所に設定します。

保存される履歴の行数は、変数 HISTSIZE および SAVEHIST によって構成されます。 HISTSIZEはセッションに保持される最大行数であり、SAVEHISTは履歴ファイルに保持される最大行数です。

いくつかの履歴を保存するには、HISTFILEのデフォルト値が0であるため、SAVEHISTSAVEHISTの両方を設定する必要があります。HISTSIZEも同様です(zsh 5.0以降、デフォルトは30のみです)。