Quiero ejecutar un programa en un entorno vacío (es decir, sin conjuntos de variables). ¿Cómo hacer esto en bash?
bash
environment-variables
Eugene Yarmash
fuente
fuente
Respuestas:
Puedes hacer esto con
env
:Contrariamente a los comentarios de abajo, esto lo hace completamente claro el medio ambiente, pero no impide
your_command
el establecimiento de nuevas variables. En particular, ejecutar un shell hará/etc/profile
que se ejecute, y el shell también puede tener algunas configuraciones integradas.Puede verificar esto con:
es decir, limpie el entorno y luego imprímalo. La salida estará en blanco.
fuente
echo 'echo $PATH' > test.sh && chmod u+x test.sh && env -i test.sh
impresiones/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
.PATH
,PWD
ySHLVL
se ajustan automáticamente por Bash. +1.env -i bash --norc -c "declare -p PATH"
dadeclare -- PATH="/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:."
. Tenga en cuenta el "-x" para exportado (y, por lo tanto, parte del entorno) si lo exporta usted mismo:env -i bash --norc -c "export PATH; declare -p PATH"
dadeclare -x PATH="/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:."
Se
bash
puede tener un ambiente "limpio" conEl
env -i
comando ejecuta el comando que se le da en la línea de comando sin transferir ninguna de las variables de entorno exportadas del antiguo entorno de shell al entorno del programa ejecutado.La
--noprofile
opción dejabash
de leer los scripts de inicialización del shell personal o de todo el sistema que de otro modo se leerían para un shell de inicio de sesión.La
--norc
opción dejabash
de leer los scripts de inicialización de shell personal que de otro modo se leerían para un shell interactivo.fuente
env -i
? ¿En qué sistema estás?env
para limpiar mi entorno, y--noprofile
evitar el abastecimiento / etc / profile and friends, y--norc
evitar el abastecimiento ~ / .bashrc y amigos.env -i somecommand
ejecuta un comando en un entorno vacío, como ya ha mencionado ams .Muchos programas dependen de algunas variables de entorno importantes, por lo que es posible que desee conservarlas:
Alternativamente, puede iniciar sesión en un pequeño entorno de tiempo de inicio de sesión.
fuente
env
no admite la--
delimitación y haceenv -i FOO=bar -- env
intentos de ejecutar un comando llamado--
.env -i -- FOO=bar env
, en realidad. Culpa mía. No es que--
sea útil ya que lo que sigue no comienza con-
.Si bien la respuesta aceptada es correcta, lo que generalmente desea hacer es:
env -i bash -l -c "printenv; and any other commands"
Esto le proporciona un bash básico pero funcional (igual que obtendría al iniciar sesión en modo no interactivo). Esto, por ejemplo, establece el idioma, la zona horaria, el INICIO, etc.
fuente
env -i
borraHOME
, lo que significabash -l
que no puede encontrar su.bash_profile
etc. Si desea un shell que es como lo que obtendría con un inicio de sesión nuevo, necesita una indirección adicional para configurarHOME
primero.El problema con la mayoría de las respuestas aquí es que
env -i
desapareceHOME
, por lo que incluso si se ejecutabash -l
en el interior, no leerá su.bash_profile
etc. Si lo que está buscando es un shell que actúa como si acabara de hacer un nuevo inicio de sesión, usted Quisiera esto en su lugar:Ejemplo:
fuente
bash
se ejecutará un shell de inicio de sesión.bash_login
o.bash_profile
. Para obtener un entorno limpio, use--noprofile
o establezcaHOME
un directorio que no tenga esos archivos. Supongo que depende de lo que quieras decir con "limpio".env -i bash -c ...
. Esta respuesta es específicamente cuando desea un shell que parece que acaba de hacer un nuevo inicio de sesión en la máquina.Para responder el comentario de balki (y responder mi propia pregunta en el proceso :-):
fuente
/usr/bin/env: invalid option -- ' ' Try '/usr/bin/env --help' for more information.
--ignore-environment
, obtengo esto:/usr/bin/env: unrecognized option '--ignore-environment SOMETHING_TO_KEEP="$USER" PATH="$PATH" /bin/sh' Try '/usr/bin/env --help' for more information.