Возникли проблемы с настройкой переменных среды в Терминале в macOS High Sierra

Возникли проблемы с настройкой переменных среды в Терминале в macOS High Sierra

У меня возникла проблема с настройкой переменной среды на моем MacBook Pro под управлением macOS High Sierra.

В терминале я попытался настроить переменную среды, выполнив export VARIABLE_URL=example.com. Затем я попытался проверить, была ли установлена ​​переменная среды с помощью echo $VARIABLE_URL, но он вернул пустой результат.

Теперь при каждом запуске терминала появляется следующее сообщение:

Last login: Tue Apr  2 15:08:56 on ttys000
[1]   Done                    export VARIABLE_URL=example.com
[2]   Done                    appVersion=
[3]   Done                    osVersion=
[4]   Done                    deviceType=
[5]+  Done                    deviceId=
My-MacBook-Pro:~ me$

Я пробовал добавить переменную в свой .bash_profileфайл, но даже это не устанавливает переменную правильно. Каждый раз, когда я это делаю echo $VARIABLE_URL, он возвращает пустое значение.

Я установил другие переменные в своем файле .bash_profile, но это единственная переменная, которую мой компьютер отказывается добавлять.

Даже когда я выполняю printenv, отображаются все переменные среды, кроме VARIABLE_URL.

Почему я не могу установить эту переменную среды?

Редактировать: Вот содержимое моего .bash_profile:

export BACKEND=example
export VARIABLE_URL=example.com
export HOST=localhost
export BASEURL=example
export SECRET=example
export USERNAME=example
export ACCESS_KEY=example

Edit2: Вот что отображается, когда я сейчас открываю терминал:

Last login: Wed Apr  3 13:06:20 on ttys000
+ export BACKEND=example
+ BACKEND=example
+ export 'VARIABLE_URL=example.com'
+ VARIABLE_URL='example.com'
+ appVersion=
+ osVersion=
+ deviceType=
+ clientType=
+ export HOST=localhost
+ HOST=localhost
+ export BASEURL=example
+ BASEURL=example
+ export SECRET=example
+ SECRET=example
+ export USERNAME=example
+ USERNAME=example
+ export ACCESS_KEY=example
+ ACCESS_KEY=example
+ deviceId=
My-MacBook-Pro:~ me$

...и вот что возвращается при printenvвыполнении:

TERM_PROGRAM=Apple_Terminal
USERNAME=example
SHELL=/bin/bash
TERM=xterm-256color
TMPDIR=/var/folders/g6/q9bwlzxn36jfb2j53c5t_t080000gn/T/
Apple_PubSub_Socket_Render=/private/tmp/com.apple.launchd.GZQ9CxlO7F/Render
TERM_PROGRAM_VERSION=404.1
TERM_SESSION_ID=45B1D3A5-719E-4C24-9026-C52A374B3809
USER=me
SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.nXK7LMtVZx/Listeners
BACKEND=example
SECRET=example
HOST=localhost
PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/Wireshark.app/Contents/MacOS
PWD=/Users/me
LANG=en_US.UTF-8
XPC_FLAGS=0x0
XPC_SERVICE_NAME=0
SHLVL=1
HOME=/Users/me
LOGNAME=me
ACCESS_KEY=example
BASEURL=example
_=/usr/bin/printenv
My-MacBook-Pro:~ me$

Последняя правка: проблема решена! Добавление одинарных кавычек в URL-адрес решило проблему:

export VARIABLE_URL='example.com'

Мне следовало бы явно объяснить, что URL, показанный в этом вопросе, является URL-адресом-заполнителем, а не тем, который был на самом деле в моем .bash_profile. Фактический URL-адрес на самом деле содержит несколько &символов. Извините, что не объяснил этого с самого начала. Я чувствую, что если бы я это сделал, проблема была бы решена раньше. В любом случае, спасибо всем за помощь и предложения, я очень рад, что теперь все это улажено.

решение1

Моя гипотеза:

Ваш фактический URL использует метод HTTP GET, например:

export VARIABLE_URL=example.com?foo=bar&appVersion=&osVersion=&deviceType=&deviceId=&fizz=buzz

Где ?и &являются частью синтаксиса URL, но оболочка интерпретирует их по-разному. &заставляет предыдущую команду выполняться в фоновом режиме. Это также разделитель, так что вместо одной команды у вас есть несколько. Первая —

export VARIABLE_URL=example.com?foo=bar

и это значение экспортируется как VARIABLE_URL.

Другое предположение: shopt -s nullglobявляется активным, поэтому ?синтаксис from GET приводит к тому, что unquoted $VARIABLE_URLрасширяется до пустой строки в любом каталоге, где нет файлов, соответствующих шаблону example.com?foo=bar.

Вы хотите

export VARIABLE_URL='example.com?foo=bar&appVersion=&osVersion=&deviceType=&deviceId=&fizz=buzz'

где одинарные кавычки заставляют оболочку воспринимать символы ?и &буквально (двойные кавычки также подойдут для этого конкретного примера; но я не знаю вашего фактического URL, одинарные кавычки в целом безопаснее). Кроме того,

echo "$VARIABLE_URL"

где двойные кавычки предотвращают подстановку (которая в противном случае произошла бы из-за ?содержимого переменной), независимо от nullglobфайлов в текущем каталоге.

решение2

Из вывода, который вы получаете от .bash_profile, я предполагаю, что у вас есть что-то вроде этого:

export VARIABLE_URL=example.com & appVersion= & osVersion= & deviceType= & deviceId= & somethingelse=

Вам не нужны &символы " ", они меняют смысл неуместным и бесполезным образом. Вы можете определить несколько переменных окружения в одной exportкоманде, разделив их пробелами:

export VARIABLE_URL=example.com appVersion= osVersion= deviceType= deviceId= somethingelse=

Или, возможно, будет понятнее использовать отдельную exportкоманду для каждой переменной:

export VARIABLE_URL=example.com
export appVersion=
export osVersion=
export deviceType=
export deviceId=
export somethingelse=

Кстати, причина, по которой " &" вызывает проблемы, заключается в том, что это разделитель между командами, и команда, которую вы хотите запустить, выполняется в фоновом режиме. Поэтому каждое назначение рассматривается как совершенно отдельная команда (только первое — это export, остальные — неэкспортированные переменные оболочки), и все, кроме последнего, выполняются в фоновом режиме .в отдельных процессах, и определения являются локальными для этих процессов (и исчезают, когда эти процессы завершаются). Вот что означают все эти строки «Done» — они указывают, что эти фоновые процессы завершены.

Связанный контент