Вопрос:
Я только заметил, что у моего $PATH есть недопустимое место:
> $PATH
zsh: no such file or directory: /usr/bin: /bin: /usr/sbin: /sbin:…
Я использую prezto, и в соответствии с документами файлы конфигурации находятся в следующем порядке:
- /И т.д. /zshenv
- ~/.zshenv
- /И т.д. /zprofile
- ~/.zprofile
- /И т.д. /zshrc
- ~/.zshrc
- ~/.zpreztorc
- /И т.д. /zlogin
- ~/.zlogin
- ~/.zlogout
- /И т.д. /zlogout
Я проверил весь список, и я не могу найти ничего, что было бы раньше /usr/bin
Любое предложение о том, как я могу найти, что вызывает проблему?
Благодарю!
Лучший ответ:
Насколько я могу судить, нет ничего плохого в вашей 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