¿Cómo desarmo una variable en la línea de comando?

80

He intentado el siguiente comando para configurar Proxy yaourt:

export ALL_PROXY=http://proxy.example.com:8080

La pregunta es cómo desactivar el proxy yaourt. En general, ¿cómo puedo desarmar el valor de una variable en el shell actual?

Hamed Kamrava
fuente
77
Probarunset ALL_PROXY
coffeMug
@coffeMug también podría convertir eso en una respuesta, también podría considerar robar alguna información de aquí: stackoverflow.com/a/12263914/1081936
terdon
Además de la respuesta aceptada, si hay un comando que ejecuta a menudo que utiliza una variable de entorno que prefiere no establecer o cambiar para el resto de su sesión de shell, puede ejecutarlo como: $ ALL_PROXY=http://proxy.example.com:8080 yaourteso configurará el entorno solo para comando ejecutado. Puede colocar tantas FOO=bar BAZ=batvariables como desee antes de que se ejecute el comando.
solo el

Respuestas:

113

Para eliminar una variable de entorno, ejecute

unset ALL_PROXY

Tenga en cuenta que una variable de entorno solo surte efecto en un programa y el programa que inicia. Si configura una variable de entorno en una ventana de shell, no afecta a otras ventanas de shell.

Si ha agregado export ALL_PROXY=…a un archivo de inicialización, elimínelo de allí.

Puede ejecutar exportsin argumentos para ver qué variables de entorno se establecen en el shell actual.

Recuerde que para hacer que una variable de shell esté disponible para los programas iniciados por ese shell, debe exportarla, ya sea ejecutando export VARdespués de la asignación VAR=VALUEo combinando los dos ( export VAR=VALUE).

Gilles
fuente
19

Para desarmar una variable enlazada en bash use unset VARIABLE( unset ALL_PROXYen su caso). Este comando en realidad elimina la variable. También puede establecer el valor de una variable para vaciar por

VARIABLE=

o

VARIABLE=""

La diferencia es que los dos últimos comandos no eliminan la variable. Puede ver la diferencia usando el -uindicador con setpara forzarlo a tratar las variables no definidas como un error al sustituir:

/home/user1> var=""
/home/user1> echo $var

/home/user1> set -u
/home/user1> echo $var

/home/user1> unset var
/home/user1> echo $var
-bash: var: unbound variable

En el ejemplo anterior, bash se queja de varque no está vinculado (después de desarmar su valor), que es el error esperado (tenga en cuenta que esto no sucede en el segundo comando echo, lo que significa que vartiene un valor que es emptyo null).

taza de cafe
fuente
¿Qué pasa si tengo una variable en mi archivo de script de shell y obtengo ese archivo, entonces cómo voy a desarmar eso?
Abhinav
Uso de @Abhinav unseten el script. Lo mismo aplica.
coffeMug