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

sup*_*roi 2 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

我检查了整个清单,我找不到以前会发生的任何事情 /usr/bin

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

谢谢!

Ada*_*hon 19

据我所知,你的问题没有错PATH.如果你想看到的内容PATH使用echo:

% echo $PATH
/usr/sbin:/usr/bin:/sbin:/bin
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

  • 虽然我几乎没有希望得到答案,但这里是:为什么不投票?我有理由(阅读:非常)确定我正确诊断并回答了问题。如果答案存在事实错误或其他问题,我想知道它是什么,以便我学到一些东西和/或改进答案。 (2认同)