2021年7月11日日曜日

履歴が更新されないZ、解決編

zshのヒストリが更新されない問題の解決編。

まず、この問題自体はmacOS限定だった。もっと言うと、macOS標準のターミナル限定。そして解決方法は、~/.zshenvで

SHELL_SESSIONS_DISABLE=1

と設定する。問題の対処だけできれば十分な人は、以下は読まなくてもよし。

問題のふるまいの元は、/etc/zshrc_Apple_Terminalにあった。これはmacOS標準のターミナルでzshを実行する場合のみ、/etc/zshrcの最後にsourceされるスクリプト。この中で行われるセッション毎にヒストリを持たせる処理を、マルっとスキップさせるための変数がSHELL_SESSIONS_DISABLE。ここに0以外の値を設定しておけば、従来どおりのふるまいとなる。なお、zshrc_Apple_Terminal内のコメントには環境変数を設定しろと書いてあるけど、シェル変数で十分。

注意点として、/etc/zshrcが実行される前にSHELL_SESSIONS_DISABLEが設定されていなければならないので、~/.zshrcで設定しても間に合わない。zshrc_Apple_Terminal内のコメントにもあるとおり、~/.zshenvで設定するのが無難だろう。本当は~/.zshenvには、インタラクティブシェル用の設定を書きたくないんだけど。

なお、どう見てもMac向けのコードでライセンスが分からなかったので、このポストでは引用を避けた。Macを持ってないけど気になる人は、最寄りのMac売り場で確かめてくれ。

0 件のコメント:

コメントを投稿