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 founddespués de la ejecución, mientras que la preposiciónenvno 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 elenvmétodo de ahora en adelante.VAR1="hello" echo $VAR1tal no devuelve nada?VAR1="hello" bash -c 'echo $VAR1'fuente
VAR=value myScript args ...PATH=$PATH:XYZ echo $PATH | grep XYZes 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íenvy no usarlo?IFS=$'\n' for l in lines; do ... doneSó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
exportpasará 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.sourceel script que será ejecutado por el mismo shell en el que escribe el comando.$HOMEser heredado por algún comando ejecutado desde el script. Y si no lo hace, y la configuración de$HOMEes solo para beneficio del script en sí, entonces probablemente sería mejor modificar el script para que se refiera a algo diferente$HOME.