Ejecutar script de shell sin variables ambientales

17

Como sé, el script de shell recién ejecutado hereda sus variables de entorno. ¿Hay alguna manera de bloquear esto? (ejecutando shell sin heredar variable)

Eonil
fuente

Respuestas:

21

Parece que puede prefijar su script con el env -ique borrará el entorno antes de ejecutar el script:

env -i sh test.sh

De man env:

-i, --ignore-environment
              start with an empty environment

Aunque no estoy seguro de por qué querrías hacer esto ...

vmfarms
fuente
Gracias. Esto funcionó! Necesito esto para llamar al script de compilación en IDE sin influir en las variables de entorno de configuración de IDE. Pero aún lejos de la meta. ¡Esto puede ayudar a tu curiosidad!
Eonil
Para agregar otro caso de uso: actualmente estoy evaluando fish y zsh como alternativa a bash. Pero no estoy listo para promocionar el shell candidato como mi shell de inicio de sesión (como en chsh .... Si solo abro una ventana de terminal y ejecuto zsho fish(con o sin -limportancia) contamina mi entorno con todo tipo de variables desde shell Lo empecé. Hacer el truco env -cresuelve este problema para mí. Sí env -i TERM=xterm-256color $(which fish).
Paidhi
Esto es útil si tiene una tarea cron que falla porque el entorno no está configurado correctamente y necesita probarlo; También es una buena manera de probar si sus scripts hacen suposiciones sobre la configuración del entorno. ¡Gracias!
saqueó el
Otro posible lugar en el que esto podría ser útil es probar algunos trabajos periódicos (como los trabajos cron) para asegurarse de que no haya dependencias ambientales en el script. Lo mismo con los comandos que se ejecutarían en un recurso "Exec" en un manifiesto títere.
TommyTheKid
1

Una posibilidad (aunque se ve bastante fea):

exec -c $SCRIPTiniciará $ SCRIPT con un entorno vacío. (ver man bashbúsqueda de exec \[-cl\]).

weeheavy
fuente
1
Esto funcionó casi por igual con env -i, sin embargo, elijo usar env -i porque exec deja de ejecutar el resto del script.
Eonil
-1

Hasta donde yo sé, la respuesta es "No". Puede anular las variables ambientales dentro del script mismo. El valor de la variable de entorno debería volver a su valor original una vez que el script haya terminado de ejecutarse. Probablemente necesite ejecutar el script como un proceso secundario: $ this.script.sh & para evitar tener que cerrar sesión en su shell cada vez que ejecute el script para restablecer las variables de entorno a su valor original.

Editar:

De un póster anterior, parece que estoy equivocado acerca de que no sea posible.

usuario53079
fuente