9

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

\> $PATH
zsh: no such file or directory: /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

关于如何找到触发问题的任何建议?

谢谢!

4

1 回答 1

41

据我所知,您的PATH. 如果要查看使用PATH内容echo

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

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

您的问题是通过尝试执行来触发的$PATH。在执行命令行之前,zsh - 除其他外 - 将所有变量替换为它们的内容,这称为参数扩展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
于 2014-02-07T06:23:55.700 回答