У меня возникла проблема с настройкой переменной среды на моем 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» — они указывают, что эти фоновые процессы завершены.