В моей пользовательской среде я / (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
. Конфигурации профиля запускаются один раз для каждой оболочки входа. В этом контексте вы можете рассматривать конфигурации профиля как начальную конфигурацию.