2010-04-27 207 views
2

我对zsh有一个相当奇怪的问题。当我启动我的shell时,一切 - 函数,环境变量,别名等 - 都工作正常。我创建了以下功能和zsh的来源是:zsh:找不到命令:ls

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

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

zsh: command not found: ls 

我有几个其他的工作就好了,这使我相信,不知何故,这个循环是造成问题的功能。无论如何,这是非常令人沮丧的,我会真诚地感谢社区的眼睛。谢谢!

+0

此脚本不会打印任何内容,它只是创建一个函数。请告诉您重现错误的确切步骤。 – wRAR 2010-04-27 19:16:43

+0

创建函数后,我简单地在zsh中运行'clean'。我会更新这篇文章,试图说清楚。 – ABach 2010-04-27 19:18:39

+2

无法在这里重现。 – wRAR 2010-04-27 19:19:36

回答

4

问题是指定path变量 - 因为zsh具有保留的变量(除了PATH),所以覆盖它将消除shell找到任何命令的能力。

正确答案,当然是使用一个变量以外$path

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

接受你的答案。我怀疑你覆盖了PATH变量。这非常重要。使用不在环境中的另一个。例如,CLEAN_PATH不应该具有这种影响。 – xenoterracide 2010-04-27 22:55:24

+0

哦,我的...这是多么明显。谢谢。 :) – ABach 2010-04-27 22:56:23

+0

另外 - 我只能在两天内接受我自己的答案...... – ABach 2010-04-27 22:57:38

1

我猜它会覆盖变量path,这是用来查找命令之一。这就是为什么它不再查找命令。

0

我挖了几个小时再找到这个。岩组提供一个很好的特技从PATH型变量,位出主题的删除重复,但可能是有用的:

typeset -T PYTHONPATH pythonpath 
typeset -U pythonpath 
  1. 第一行绑定PYTHONPATH冒号隔开字符串的zsh阵列
  2. 第二删除重复项