猫が.zshenvでランダムに停止する

猫が.zshenvでランダムに停止する

これは私のコンテンツです~/.zshenv/etc/zshenvスペース)

print -P "before %D{%H:%M:%S}"
/usr/bin/time /bin/cat /dev/null
print -P "after %D{%H:%M:%S}"

を起動しようとすると、zsh最大cat30秒間コマンドの実行が中断されます。

bash$ zsh -c exit
before 16:04:08
  0.00s user 0.00s system 0% cpu 0.001 total
after 16:04:29

その後、すぐに別の新しいzshを開くと停止は発生しません。最初に少なくとも2分待つと、これはほとんど常に発生します。

なぜこれが起こるのですか?どうやって防ぐことができますか?

zsh-4.3.11CentOS 6.9にあります。

答え1

遅い理由は、hashローカルSAが自分のパスに配置するデフォルトディレクトリの1つに8,000を超えるエントリが含まれているためです。

使用straceStéphane Chazelasが提案したコマンドstat()使用された通話によってhash速度が遅くなることがわかりました。

その直後に別のシェルを開くと、各stat()呼び出しは180倍速くなります(おそらくキャッシュのため)。これは、各呼び出しに速度低下がない理由を説明します。

修正として私のPATHPATH

関連情報