zsh:找不到命令:ls

时间:2010-04-27 19:13:42

标签: function loops zsh

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

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

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

zsh: command not found: ls

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

3 个答案:

答案 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
  1. 第一行将PYTHONPATH冒号分隔的字符串绑定到zsh数组
  2. 第二次删除重复