cat 在 .zshenv 中随机挂起

cat 在 .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,它偶尔会在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 多个条目。

使用straceStéphane Chazelas 建议的命令据透露,stat()所使用的呼叫hash导致了速度减慢。

如果我随后立即打开另一个 shell,则每次stat()调用速度会提高 180 倍(可能是由于缓存),这解释了为什么每次调用都不会出现速度减慢的情况。

作为修复,我从我的PATH.如果我需要那里的任何可执行文件,我只需将它们的符号链接放在我的PATH.

相关内容