zsh路径“没有这样的文件或目录”我在哪里取消它?

时间:2014-02-06 16:33:25

标签: zsh zshrc

我刚注意到我的$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
  12. 我查看了整个列表,但在/usr/bin

    之前找不到任何内容

    关于如何找到导致问题的原因的任何建议?

    谢谢!

1 个答案:

答案 0 :(得分:17)

据我所知,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