Как я могу навсегда добавить путь к переменной среды, связанной с путем, когда он может быть или не быть пустым?

Я хочу навсегда добавить путь к $PYTHONPATH. Согласно этому ответу SO, добавив

export PYTHONPATH = "${PYTHONPATH}:/my/other/path"

в файл .bashrc должен выполнить это на Mac или дистрибутиве GNU/Linux. Однако в моей системе $PYTHONPATH пусто, поэтому после экспорта, если я echo $PYTHONPATH, он возвращает :/my/other/path - который не является допустимым путем из-за префикса :. Один из способов обойти это - сделать

export PYTHONPATH = "/my/other/path"

но это забьет другие пути, если они существуют на разных машинах. Как я могу справиться с обоими случаями?

Какую оболочку вы используете?

Michael M. 13.01.2023 01:40

Это также рассматривается в некоторых ответах: unix.stackexchange.com/questions/26047/…

mkrieger1 13.01.2023 01:52

Пожалуйста, отмечайте вопросы в соответствии с проблемой, которую вы пытаетесь решить, а не в соответствии с тем, почему вы хотите ее решить. У эксперта по Python нет особых преимуществ в объяснении того, как устанавливать переменные среды в конкретной оболочке; эксперт в этой оболочке делает.

Karl Knechtel 13.01.2023 02:17

Спасибо, кто-то добавил bash, а я добавил zsh, так как он работает и для zsh.

Obromios 13.01.2023 04:10
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
58
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Тест if -z сообщит вам, является ли переменная пустой/неустановленной. Если это так, не используйте двоеточие, в противном случае используйте его.

if [ -z ${PYTHONPATH} ];
then
    export PYTHONPATH = "/my/other/path"
else
    export PYTHONPATH = "${PYTHONPATH}:/my/other/path"
fi

Вы можете поместить это в свой .bashrc:

[ -z "${PYTHONPATH-}" ] && export PYTHONPATH = "/my/other/path" || export PYTHONPATH = "${PYTHONPATH}:/my/other/path"

что совпадает с предыдущим ответом.

PYTHONPATH=$PYTHONPATH:/my/other/path
PYTHONPATH=${PYTHONPATH#:}

Это удалит начальное двоеточие, полученное из изначально пустого PYTHONPATH

В zsh вы можете использовать typeset -T для создания «связанных» переменных, которые идеально подходят для управления путями. Эти переменные можно настроить так, чтобы они добавляли только двоеточия по мере необходимости, добавляли к пути только уникальные элементы и экспортировали результат.

typeset -xUT PYTHONPATH pythonpath 

pythonpath+=/usr/local/lib
print $PYTHONPATH
# ==> /usr/local/lib

pythonpath+=/usr/lib
pythonpath+=/usr/local/lib # duplicate not added
print $PYTHONPATH
# ==> /usr/local/lib:/usr/lib

Подробнее здесь.

Другие вопросы по теме