Function zsh:未找到命令:ls

Function zsh:未找到命令:ls,function,loops,zsh,Function,Loops,Zsh,我对zsh有一个相当奇怪的问题。当我启动shell时,所有东西——函数、环境变量、别名等等——都可以正常工作。我创建了以下函数,并在zsh中对其进行了源代码转换: clean() { path=/tmp for i in ${path}/*; do echo $i done } 在终端中运行clean,工作正常,因为它会打印出/tmp/中的所有文件。但是,之后,尝试任何命令(例如ls)都会产生以下结果: zsh: command not found:

我对zsh有一个相当奇怪的问题。当我启动shell时,所有东西——函数、环境变量、别名等等——都可以正常工作。我创建了以下函数,并在zsh中对其进行了源代码转换:

clean()
{
    path=/tmp    
    for i in ${path}/*; do
      echo $i
    done
}
在终端中运行
clean
,工作正常,因为它会打印出/tmp/中的所有文件。但是,之后,尝试任何命令(例如ls)都会产生以下结果:

zsh: command not found: ls

我还有几个其他的函数工作得很好,这让我相信,不知何故,这个循环导致了这个问题。无论如何,这是非常令人沮丧的,我衷心感谢社区的关注。谢谢

问题在于分配
path
变量-因为zsh保留了该变量(除了path之外),所以覆盖它会使shell无法查找任何命令

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

local_path=/tmp    
for i in ${local_path}/*; do
  echo $i
done

我猜它会覆盖变量
path
,该变量用于查找命令。这就是为什么它再也找不到命令了。

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

typeset -T PYTHONPATH pythonpath
typeset -U pythonpath
  • 第一行将PYTHONPATH冒号分隔字符串绑定到zsh数组
  • 第二步是删除重复项

  • 这个脚本不打印任何内容,它只是创建了一个函数。请告诉我复制错误的具体步骤。创建函数后,我在zsh中简单地运行
    clean
    。我会更新帖子,让它更清晰。在运行之前,你的环境中的任何其他东西都有干净的别名吗?qor-否。即使我将函数名更改为“foobar123”,我仍然会遇到同样的问题。无法复制-完全按照我的预期工作。这一定是你周围环境中的一个问题。接受你的答案。我怀疑您正在覆盖PATH变量。这是非常重要的。使用环境中尚未包含的其他文件。例如,CLEAN_PATH不应该有这种影响。。。这有多明显。谢谢。:)试着在
    set-x
    之后运行你的原始函数,看看跟踪是否告诉你了什么。显然,这是关于路径和路径的文档,但是zsh两者都有,这意味着你不应该弄乱它们。哈哈,你应该接受我的答案,因为我几分钟前说过同样的话。。。