Назад | Перейти на главную страницу

лучшая практика для установки переменной PATH во вложенном пользовательском env

В моей пользовательской среде я / (macports) установил мой PATH в виде

PATH=app1/bin:app2/bin/:...:$PATH

Однако, если у меня есть вложенные оболочки, переменная PATH все время объединяется, конечно, это не серьезная проблема, но все же нет лучшего решения?

Вы можете довольно легко проверить, находится ли этот каталог уже в PATH:

for dir in app1/bin app2/bin; do
    if [[ :"$PATH": != *:"$dir":* ]]; then
        PATH="$dir:$PATH"
    fi
done

Он ищет каталог, разделенный двоеточиями, в вашем PATH. Обратите внимание, что звездочки должны находиться вне кавычек, как показано.

Другой способ написать это:

[[ :"$PATH": != *:app1/bin:* ]] && PATH="app1/bin:$PATH"
[[ :"$PATH": != *:app2/bin:* ]] && PATH="app2/bin:$PATH"

Хорошо, проблема просто в том, что PATH как есть все еще действителен для вложенных оболочек, т.е. мы не должны повторно оценивать переменную PATH, т.е. не включать ее в .bashrc|.zshrc, но вставьте это в .profile|.zprofile. Конфигурации профиля запускаются один раз для каждой оболочки входа. В этом контексте вы можете рассматривать конфигурации профиля как начальную конфигурацию.