我对zsh有一个相当奇怪的问题。当我启动我的shell时,一切 - 功能,环境变量,别名等 - 一切正常。我创建了以下函数并在zsh中获取它:
clean()
{
path=/tmp
for i in ${path}/*; do
echo $i
done
}
在终端中运行clean
按预期工作,因为它打印出/ tmp /中的所有文件。然而,之后,尝试任何命令 - 例如,ls - 产生这个:
zsh: command not found: ls
我还有其他几个功能正常,这让我相信不知何故,这个循环导致了问题。无论如何,这是非常令人沮丧的,我真诚地感谢社区的眼睛。谢谢!
答案 0 :(得分:5)
问题是分配path
变量 - 因为zsh保留了该变量(除了PATH),覆盖它会删除shell找到任何命令的能力。
当然,正确的答案是使用$path
以外的变量:
local_path=/tmp
for i in ${local_path}/*; do
echo $i
done
答案 1 :(得分:1)
我猜它会覆盖变量path
,这是用于查找命令的变量。这就是为什么它不再找到命令了。
答案 2 :(得分:0)
我挖了好几个小时再找到这个。 Zsh提供了一个很好的技巧来删除PATH类型变量中的重复项,有点偏离主题,但可能有用:
typeset -T PYTHONPATH pythonpath
typeset -U pythonpath