Estou com 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
. Em seguida, tentei verificar se a variável de ambiente estava definida com echo $VARIABLE_URL
, mas ela 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 eu faço echo $VARIABLE_URL
, ele retorna em branco.
Eu defini outras variáveis no meu .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 posso definir essa 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 funcionou:
export VARIABLE_URL='example.com'
Eu deveria ter explicado explicitamente que o URL mostrado nessas perguntas é um URL de espaço reservado, não aquele que estava realmente no meu arquivo .bash_profile
. A URL real contém, de fato, vários &
caracteres. Me desculpe por não explicar isso desde o início. Eu sinto que se eu tivesse feito isso, o problema teria sido resolvido mais cedo. Independentemente disso, obrigado a todos por sua ajuda e sugestões, estou muito feliz por ter tudo resolvido agora.
Pela saída que você está obtendo de .bash_profile, imagino que você tenha algo assim:
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 únicoexport
comando, separando-as com espaços:Ou pode ser mais claro usar apenas um
export
comando separado para cada variável:BTW, a razão pela qual "
&
" causa problemas é que é um delimitador entre os comandos e faz com que o comando seja executado em segundo plano. Portanto, cada atribuição é tratada como um comando completamente separado (somente o primeiro é umexport
, o restante são variáveis de shell não exportadas) e todos, exceto o último, são executados em segundo plano em processos separados , e as definições são locais para esses processos (e desaparecem quando esses processos terminam). Isso é o que todas essas linhas "Concluídas" são - elas indicam que esses processos em segundo plano foram concluídos.Minha hipótese:
Sua URL real usa o método HTTP GET, assim:
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 ée esse valor é exportado como
VARIABLE_URL
.Outra suposição:
shopt -s nullglob
está ativo, portanto, a?
partir da sintaxe GET faz com que sem aspas$VARIABLE_URL
se expanda para uma string nula em qualquer diretório onde não haja arquivos correspondentes ao padrãoexample.com?foo=bar
.Você quer
onde as aspas simples tornam o shell tratar
?
e os&
caracteres literalmente (aspas duplas também funcionariam com este exemplo específico; mas não conheço seu URL real, as aspas simples são mais seguras em geral). Adicionalmenteonde as aspas duplas impedem o globbing (que, de outra forma, ocorreria devido
?
ao conteúdo da variável), independentemente dosnullglob
arquivos e no diretório atual.