该which
命令从来都不是特别快,但自从我换到 Windows 10 后,它就变得非常慢。我.zshrc
随身携带一个通用程序,因此它会在配置某些程序之前测试它们是否可用。前几次调用需要 10 秒以上。
which
我使用的是内置的zsh 。这可能有所作为,尽管定义which() { /usr/bin/which "%@" }
似乎并没有改善任何事情。
注意:我没有安装任何网络驱动器。
答案1
考虑到您在这种情况下所做的事情,一种解决方法和更好的方法是完全避免使用which
,如下所示:
if (( $+commands[foobar] ))
# configure foobar
fi
它是如何工作的?
从zshexpn(1)
:
${+名称}
如果名称是设置参数的名称,则替换为“1”,否则替换为“0”。
$commands
是一个关联数组,由嘚(也是hash
内置的)由命令名称作为键,及其关联路径作为值组成。
因此,使用哈希表${+name}
上的扩展$commands
,按您想要测试其存在的命令进行索引,可以为您提供一种廉价而快速的方法来进行检查。
最后,该(( expr ))
构造是一个算术评估,因为${+name}
扩展返回 0 或 1。