Tener problemas para configurar variables de entorno en la Terminal en macOS High Sierra

Tener problemas para configurar variables de entorno en la Terminal en macOS High Sierra

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_profilearchivo, 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 printenvse 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 nullglobestá activo, por lo que ?la sintaxis GET hace que uncomillas $VARIABLE_URLse 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 nullgloblos 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 exportcomando separándolas con espacios:

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

O podría ser más claro usar un exportcomando 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.

información relacionada