これは私のコンテンツです~/.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
最大cat
30秒間コマンドの実行が中断されます。
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.11
CentOS 6.9にあります。
答え1
遅い理由は、hash
ローカルSAが自分のパスに配置するデフォルトディレクトリの1つに8,000を超えるエントリが含まれているためです。
使用strace
Stéphane Chazelasが提案したコマンドstat()
使用された通話によってhash
速度が遅くなることがわかりました。
その直後に別のシェルを開くと、各stat()
呼び出しは180倍速くなります(おそらくキャッシュのため)。これは、各呼び出しに速度低下がない理由を説明します。
修正として私のPATH
。PATH