![Tener problemas para configurar variables de entorno en la Terminal en macOS High Sierra](https://rvso.com/image/1586929/Tener%20problemas%20para%20configurar%20variables%20de%20entorno%20en%20la%20Terminal%20en%20macOS%20High%20Sierra.png)
Tengo un problema al configurar una variable de entorno en mi MacBook Pro con macOS High Sierra.
En la terminal, intenté configurar una variable de entorno ejecutando export VARIABLE_URL=example.com
. Luego intenté verificar que la variable de entorno estuviera configurada con echo $VARIABLE_URL
, pero arrojó un resultado en blanco.
Ahora cada vez que inicio la terminal, aparece este mensaje:
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$
Intenté agregar la variable a mi .bash_profile
archivo, pero ni siquiera esto configura la variable correctamente. Cada vez que lo hago echo $VARIABLE_URL
, vuelve en blanco.
He configurado otras variables en mi .bash_profile
, pero esta es la única variable que mi computadora se niega a agregar.
Incluso cuando ejecuto printenv
, se muestran todas las variables de entorno excepto VARIABLE_URL
.
¿Por qué no puedo configurar esta variable de entorno?
Editar: Aquí está el contenido de mi .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: Esto es lo que se muestra cuando abro la terminal ahora:
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$
...y esto es lo que se devuelve cuando printenv
se ejecuta:
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$
Edición final: ¡Se ha solucionado! Agregar comillas simples a la URL funcionó:
export VARIABLE_URL='example.com'
Debería haber explicado explícitamente que la URL que se muestra en estas preguntas es una URL de marcador de posición, no la que realmente estaba en mi archivo .bash_profile
. De hecho, la URL real contiene varios &
caracteres. Lamento no haberlo explicado desde el principio. Siento que si lo hubiera hecho, el problema se habría solucionado antes. De todos modos, gracias a todos por su ayuda y sugerencias, estoy muy feliz de haber solucionado todo esto ahora.
Respuesta1
Mi hipótesis:
Su URL real utiliza el método HTTP GET, como este:
export VARIABLE_URL=example.com?foo=bar&appVersion=&osVersion=&deviceType=&deviceId=&fizz=buzz
Donde ?
y &
son parte de la sintaxis de la URL, pero el shell los interpreta de manera diferente. &
hace que el comando anterior se ejecute en segundo plano. También es un separador, por lo que en lugar de un comando tienes varios. El primero es
export VARIABLE_URL=example.com?foo=bar
y este valor se exporta como VARIABLE_URL
.
Otra suposición: shopt -s nullglob
está activo, por lo que ?
la sintaxis GET hace que uncomillas $VARIABLE_URL
se expanda a una cadena nula en cualquier directorio donde no haya archivos que coincidan con el patrón example.com?foo=bar
.
Quieres
export VARIABLE_URL='example.com?foo=bar&appVersion=&osVersion=&deviceType=&deviceId=&fizz=buzz'
donde las comillas simples hacen que el shell trate ?
los &
caracteres literalmente (las comillas dobles también funcionarían con este ejemplo en particular; pero no conozco su URL real, las comillas simples son más seguras en general). Además
echo "$VARIABLE_URL"
donde las comillas dobles evitan el globbing (que de otro modo ocurriría debido ?
al contenido de la variable), independientemente de nullglob
los archivos y en el directorio actual.
Respuesta2
Por el resultado que obtienes de .bash_profile, supongo que tienes algo como esto:
export VARIABLE_URL=example.com & appVersion= & osVersion= & deviceType= & deviceId= & somethingelse=
No quieres que los &
caracteres " " estén ahí, cambian el significado de maneras irrelevantes e inútiles. Puede definir un montón de variables de entorno en un solo export
comando separándolas con espacios:
export VARIABLE_URL=example.com appVersion= osVersion= deviceType= deviceId= somethingelse=
O podría ser más claro usar un export
comando separado para cada variable:
export VARIABLE_URL=example.com
export appVersion=
export osVersion=
export deviceType=
export deviceId=
export somethingelse=
Por cierto, la razón " &
" causa problemas es que es un delimitador entre comandos y crea el comando antes de que se ejecute en segundo plano. Por lo tanto, cada asignación se trata como un comando completamente separado (solo el primero es un export
, el resto son variables de shell no exportadas) y todos, excepto el último, se ejecutan en segundo plano.en procesos separados, y las definiciones son locales para esos procesos (y desaparecen cuando esos procesos finalizan). Eso es lo que son todas esas líneas "Listo": indican que esos procesos en segundo plano han finalizado.