zsh路径问题:“没有这个文件或目录”,我应该在哪里取消设置?

16

我刚刚注意到我的$PATH有一个无效的位置:

\> $PATH
zsh: 没有那个文件或目录: /usr/bin:/bin:/usr/sbin:/sbin: ...

我使用prezto,并根据文档,配置文件按照以下顺序被调用:

  1. /etc/zshenv
  2. ~/.zshenv
  3. /etc/zprofile
  4. ~/.zprofile
  5. /etc/zshrc
  6. ~/.zshrc
  7. ~/.zpreztorc
  8. /etc/zlogin
  9. ~/.zlogin
  10. ~/.zlogout
  11. /etc/zlogout

我检查了整个列表,但找不到在/usr/bin之前出现的任何内容。

您有什么建议吗?如何找到触发问题的原因?

谢谢!

1个回答

54
据我所知,您的PATH没有任何问题。如果您想查看PATH的内容,请使用echo:

据我所知,您的PATH没有任何问题。如果您想查看PATH的内容,请使用echo:

% echo $PATH
/usr/sbin:/usr/bin:/sbin:/bin

PATH是一个由冒号分隔的目录列表,用于搜索命令。基本上,zsh将使用每个路径尝试您命令的名称,并执行第一次找到的命令(/usr/sbin/foo, /usr/bin/foo等)。如果列出的任何目录不存在,将不会有错误消息,zsh将简单地在那里找不到二进制文件并尝试下一个。

在您的情况下,问题是尝试执行$PATH引起的。在执行命令行之前,zsh - 等等 - 将所有变量替换为它们的内容,这称为Parameter Expansion(因此,请参阅man 1 zshexpn以获取更多信息)。

所以,当您只写$PATH时,zsh将其替换为/usr/bin:/bin:/usr/sbin:/sbin:...,并将其解释为一个长路径。也就是说,:不作为分隔符而作为目录名称的一部分。您得到的任何错误消息都与任何其他不存在的目录一样:

% ls /some/path
dir1 dir2
% /some/path/nothere/notthere
zsh: no such file or directory: /some/path/nothere/notthere

谢谢你澄清。 - superuseroi
9
虽然我不抱有太大希望能得到回答,但问题还是在这里:为什么会被踩?我相当确定(甚至可以说非常确定)我已经正确诊断和回答了这个问题。如果我的回答存在事实错误或其他问题,我想知道是什么,从而学习并改进我的回答。 - Adaephon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接