Tenho um problema ao definir uma variável de ambiente no meu MacBook Pro executando o macOS High Sierra.
No terminal, tentei configurar uma variável de ambiente executando export VARIABLE_URL=example.com
. Tentei então verificar se a variável de ambiente estava definida com echo $VARIABLE_URL
, mas retornou um resultado em branco.
Agora, sempre que inicio o terminal, recebo esta mensagem:
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$
Tentei adicionar a variável ao meu .bash_profile
arquivo, mas mesmo isso não define a variável corretamente. Toda vez que faço isso echo $VARIABLE_URL
, ele retorna em branco.
Eu configurei outras variáveis no meu arquivo .bash_profile
, mas esta é a única variável que meu computador se recusa a adicionar.
Mesmo quando executo printenv
, todas as variáveis de ambiente são exibidas, exceto VARIABLE_URL
.
Por que não consigo definir esta variável de ambiente?
Editar: Aqui está o conteúdo do meu .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: Aqui está o que é exibido quando abro o terminal agora:
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$
...e aqui está o que é retornado quando printenv
é executado:
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$
Edição Final: Foi resolvido! Adicionar aspas simples ao URL resolveu o problema:
export VARIABLE_URL='example.com'
Eu deveria ter explicado explicitamente que o URL mostrado nestas perguntas é um URL de espaço reservado, não aquele que estava realmente no meu arquivo .bash_profile
. Na verdade, o URL real contém vários &
caracteres. Sinto muito por não explicar isso desde o início. Sinto que se tivesse feito isso, o problema teria sido resolvido mais cedo. Independentemente disso, obrigado a todos pela ajuda e sugestões, estou muito feliz por ter tudo resolvido agora.
Responder1
Minha hipótese:
Seu URL real usa o método HTTP GET, assim:
export VARIABLE_URL=example.com?foo=bar&appVersion=&osVersion=&deviceType=&deviceId=&fizz=buzz
Onde ?
e &
fazem parte da sintaxe da URL, mas o shell os interpreta de maneira diferente. &
faz com que o comando anterior seja executado em segundo plano. Também é um separador, portanto, em vez de um comando, você tem vários. O primeiro é
export VARIABLE_URL=example.com?foo=bar
e esse valor é exportado como VARIABLE_URL
.
Outra suposição: shopt -s nullglob
está ativo, portanto, a ?
partir da sintaxe GET faz com que o unquoted $VARIABLE_URL
se expanda para uma string nula em qualquer diretório onde não haja arquivos correspondentes ao padrão example.com?foo=bar
.
Você quer
export VARIABLE_URL='example.com?foo=bar&appVersion=&osVersion=&deviceType=&deviceId=&fizz=buzz'
onde aspas simples fazem o shell tratar ?
e &
os caracteres literalmente (aspas duplas também funcionariam com este exemplo específico; mas não sei seu URL real, aspas simples são mais seguras em geral). Adicionalmente
echo "$VARIABLE_URL"
onde aspas duplas evitam globbing (que de outra forma ocorreria por causa ?
do conteúdo da variável), independentemente dos nullglob
arquivos e no diretório atual.
Responder2
Pela saída que você obtém de .bash_profile, suponho que você tenha algo assim:
export VARIABLE_URL=example.com & appVersion= & osVersion= & deviceType= & deviceId= & somethingelse=
Você não quer os &
caracteres " " ali, eles mudam o significado de maneiras irrelevantes e inúteis. Você pode definir várias variáveis de ambiente em um único export
comando, separando-as com espaços:
export VARIABLE_URL=example.com appVersion= osVersion= deviceType= deviceId= somethingelse=
Ou pode ser mais claro usar apenas um export
comando separado para cada variável:
export VARIABLE_URL=example.com
export appVersion=
export osVersion=
export deviceType=
export deviceId=
export somethingelse=
Aliás, o motivo " &
" causa problemas é que ele é um delimitador entre comandos e faz o comando antes de ser executado em segundo plano. Portanto, cada atribuição é tratada como um comando completamente separado (apenas o primeiro é an export
, o restante são variáveis de shell não exportadas) e todos, exceto o último, são executados em segundo planoem processos separados, e as definições são locais para esses processos (e desaparecem quando esses processos terminam). Isso é o que são todas aquelas linhas "Concluído" - elas indicam que os processos em segundo plano foram concluídos.