4

我对 zsh 有一个相当奇怪的问题。当我启动我的 shell 时,一切——函数、环境变量、别名等——都可以正常工作。我创建了以下函数并在 zsh 中获取它:

clean()
{
    path=/tmp    
    for i in ${path}/*; do
      echo $i
    done
}

在终端中运行clean按预期工作,因为它打印出 /tmp/ 中的所有文件。然而,之后,尝试任何命令 - 例如, ls - 都会产生以下结果:

zsh: command not found: ls

我还有其他几个可以正常工作的函数,这让我相信不知何故,那个循环导致了问题。无论如何,这非常令人沮丧,我真诚地感谢社区的眼睛。谢谢!

4

3 回答 3

6

问题在于分配path变量 - 因为 zsh 保留了该变量(除了 PATH),覆盖它会删除 shell 查找任何命令的能力。

当然,正确的答案是使用除 之外的变量$path

local_path=/tmp    
for i in ${local_path}/*; do
  echo $i
done
于 2010-04-27T22:37:05.443 回答
1

我猜它会覆盖变量path,这是用于查找命令的变量。这就是它不再找到命令的原因。

于 2010-04-27T22:54:58.810 回答
0

我挖了几个小时才再次找到这个。Zsh 提供了一个很好的技巧来从 PATH 类型的变量中删除重复项,这有点离题,但可能很有用:

typeset -T PYTHONPATH pythonpath
typeset -U pythonpath
  1. 第一行将 PYTHONPATH 冒号分隔的字符串绑定到 zsh 数组
  2. 第二个删除重复项
于 2012-04-18T08:55:28.173 回答