代码之家  ›  专栏  ›  技术社区  ›  ABach

zsh:未找到命令:ls

  •  3
  • ABach  · 技术社区  · 15 年前

    我对zsh有点奇怪。当我启动shell时,所有东西——函数、环境变量、别名等等——都可以正常工作。我已经创建了以下函数并将其源于zsh:

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

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

    zsh: command not found: ls
    

    我还有几个其他的功能工作得很好,这让我相信,不知何故,这个循环导致了问题的产生。无论如何,这是非常令人沮丧的,我将真诚地感谢社会的目光。谢谢!

    3 回复  |  直到 13 年前
        1
  •  5
  •   ABach    15 年前

    问题是分配 path 变量-由于zsh保留了该变量(除了path),因此覆盖它会删除shell查找 任何 命令。

    当然,正确的答案是使用除 $path :

    local_path=/tmp    
    for i in ${local_path}/*; do
      echo $i
    done
    
        2
  •  1
  •   o0'.    15 年前

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

        3
  •  0
  •   yota    13 年前

    我花了好几个小时才找到这个。zsh提供了一个很好的技巧,可以从路径类型变量中删除重复项,这有点脱离主题,但可能有用:

    typeset -T PYTHONPATH pythonpath
    typeset -U pythonpath
    
    1. 第一行将pythonpath冒号分隔字符串绑定到zsh数组
    2. 第二个删除重复项
    推荐文章