En Linux (Ubuntu 11.04) en bash, ¿es posible establecer temporalmente una variable de entorno que solo será diferente de la variable normal mientras dure el script? Por ejemplo, en un script de shell, hacer que una aplicación que se guarda en HOME sea portátil configurando temporalmente HOME en una carpeta en el directorio de trabajo actual y luego iniciando la aplicación.
linux
bash
environment-variables
suchipi
fuente
fuente
Respuestas:
fuente
vblank_mode=0 glxgears
. Funciona, pero también dicevblank_mode=0: command not found
después de la ejecución, mientras que la preposiciónenv
no causa esto. [pruebas ...] Aparentemente, a zsh no le gusta (pero todavía lo usa correctamente), pero bash está bien con eso. Supongo que seguiré con elenv
método de ahora en adelante.VAR1="hello" echo $VAR1
tal no devuelve nada?VAR1="hello" bash -c 'echo $VAR1'
fuente
VAR=value myScript args ...
PATH=$PATH:XYZ echo $PATH | grep XYZ
es que no tiene salida? 2. ¿Cuál es la diferencia entre usar y no usarenv
?PATH=$PATH:XYZ sh -c 'echo $PATH' | grep XYZ
- las comillas simples son la clave aquíenv
y no usarlo?IFS=$'\n' for l in lines; do ... done
Sólo hay que poner
en el punto del script donde desea que ocurra el cambio. Dado que cada proceso tiene su propio conjunto de variables de entorno, esta definición automáticamente dejará de tener importancia cuando el script finalice (y con ello la instancia de bash que tiene un entorno cambiado).
fuente
export
pasará la variable a subcapas, pero no controla el shell primario. Si está escribiendo un script que comienza con "#! / Bin / sh" o similar, CUALQUIER variable que establezca desaparecerá cuando salga el script.source
el script que será ejecutado por el mismo shell en el que escribe el comando.$HOME
ser heredado por algún comando ejecutado desde el script. Y si no lo hace, y la configuración de$HOME
es solo para beneficio del script en sí, entonces probablemente sería mejor modificar el script para que se refiera a algo diferente$HOME
.