¿Cómo evitar que las variables de entorno exportadas sean reconocidas/accesibles por un shell secundario (bash)?

¿Cómo evitar que las variables de entorno exportadas sean reconocidas/accesibles por un shell secundario (bash)?

Por lo tanto, necesito evitar que un shell secundario reconozca un montón de variables exportadas.

El problema es que una aplicación (Wine+UDK) no crea proyectos con demasiados (>65535) bytes en el entorno, y la mía tiene muchos (95323) después de usar un proyecto (ScriptEchoColor) que comparte variables de entorno entre cualquier bash. conchas.

No puedo encontrar un comando que me permita generar un shell secundario que no acepte las variables de entorno actuales y, en su lugar, solo use las que están configuradas en mi perfil de usuario y en el sistema en su conjunto.

Probé muchas opciones que se muestran en bash --help.

Respuesta1

Puede utilizar el envcomando para iniciar un proceso con un entorno limpio. Aquí hay un ejemplo:

env -i /bin/myprog

Si aún necesitas exportar algunas variables, puedes hacerlo en la llamada:

env -i MYVAR=foo /bin/myprog

El comando env es requerido porPOSIX.

Respuesta2

env -i somecommandse ejecuta somecommanden un entorno vacío. Puedes poner argumentos después somecommand. Si PATHse borra, deberá especificar la ruta completa al archivo somecommand. Alternativamente, puede conservar PATHo establecer un valor diferente.

env -i PATH="$PATH:/another/directory" somecommand

Si desea tener el mismo entorno que tendría después de iniciar sesión, conserve solo algunas variables y cargue la suya .profilepara configurar el resto. Si utiliza un shell de inicio de sesión diferente (bash con .bash_profile, csh con .login, etc.), adáptelo en consecuencia.

env -i HOME="$HOME" PATH=/usr/local/bin:/usr/bin:/bin USER="$USER" \
    sh -c '. ~/.profile; "$@"' _ somecommand

Alternativamente, es posible que prefiera eliminar algunas variables del entorno. env -u VAR1 -u VAR2 somecommandelimina VAR1y VAR2del entorno y ejecuta somecommand. En Linux, puede utilizar env -0 | tr '\n\0' '.\n' | sed 's/=.*//'para producir una lista de variables de entorno con un nombre por línea, adecuado para filtrar. En otras variantes de Unix, env | sed 's/=.*//'hace el mismo trabajo, con la limitación de que puede encontrar falsos positivos si los valores de algunas variables contienen nuevas líneas.

Respuesta3

Emisión typeset +x variable_name...o declare +x variable_name...mando. Incluso puedes usar expresiones regulares para nombres de variables, como typeset +x ${!MY_VAR_*}.

información relacionada