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 env
comando 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 somecommand
se ejecuta somecommand
en un entorno vacío. Puedes poner argumentos después somecommand
. Si PATH
se borra, deberá especificar la ruta completa al archivo somecommand
. Alternativamente, puede conservar PATH
o 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 .profile
para 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 somecommand
elimina VAR1
y VAR2
del 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_*}
.