Официальное руководство по zsh рекомендует настроить переменную окружения PATH в zshenv:

http://zsh.sourceforge.net/Intro/intro_3.html

`.zshenv' во всех вызовах оболочки, если не задана опция -f . Он должен содержать команды для установки пути поиска команд, а также другие важные переменные среды.
`.zshenv' не должен содержать команд, которые производят вывод или предполагают, что оболочка присоединена к tty.

По моему опыту, это на самом деле плохая идея, потому что многие утилиты манипулируют вашим PATH в целях помещения вас в какую-то изолированную среду. Примеры этого очень распространенного паттерна включают в себя python virtualenv, nix-shell и другие. Если вы просто без разбора установите свой PATH в .zshenv , вы уничтожите эти изменения и сломаете песочницу.

Чтобы обойти это, я установил переменную среды после настройки PATH, и проверяю, чтобы убедиться, что переменная среды не установлена перед выполнением настройки PATH в zshenv.

Проблема с этим подходом состоит в том, что многие операционные системы явно устанавливают PATH (игнорируя любое предыдущее значение) в нечто вроде /etc/profile . Когда запускаются последующие оболочки, моя конфигурация избегает перенастройки PATH потому что она уже настроена, но эти изменения были заблокированы тем, что находится в /etc/profile .

В итоге: этот бизнес по настройке PATH намного сложнее, чем можно было ожидать. Я чувствую, что на самом деле у меня есть достаточно четкое понимание того, как все работает, и все же, мне не совсем понятно, что такое "правильная вещь".

Я подозреваю, что существование оболочек 'login' и 'non-login' отчасти является попыткой решения этой проблемы, но затем проблема, но руководство zsh, кажется, очень ясно говорит о том, что PATH должен быть настроен в .zshenv , Мне кажется странным, что вам придется использовать механизм переменных среды, который я настроил, просто чтобы заставить что-то вроде virtualenv работать вообще.

0