这是我的内容~/.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,则挂起永远不会发生。如果我先等待至少两分钟,这种情况几乎总是会发生。
为什么会发生这种情况?我怎样才能阻止它?
这是zsh-4.3.11
在 CentOS 6.9 上。
答案1
放缓的原因是hash
.本地 SA 放入我的路径中的默认目录之一包含 8k 多个条目。
使用strace
Stéphane Chazelas 建议的命令据透露,stat()
所使用的呼叫hash
导致了速度减慢。
如果我随后立即打开另一个 shell,则每次stat()
调用速度会提高 180 倍(可能是由于缓存),这解释了为什么每次调用都不会出现速度减慢的情况。
作为修复,我从我的PATH
.如果我需要那里的任何可执行文件,我只需将它们的符号链接放在我的PATH
.