Respuestas:
Cuando ejecuta un programa, el programa hijo hereda sus variables de entorno del padre. Por ejemplo, si $HOME
se establece /root
en el padre, la $HOME
variable del niño también se establece en /root
.
Esto solo se aplica a las variables de entorno marcadas para exportación. Si establece una variable en la línea de comando como
$ FOO="bar"
Esa variable no será visible en los procesos secundarios. No, a menos que lo exporte:
$ export FOO
Puede combinar estas dos declaraciones en una sola en bash (pero no en sh de la vieja escuela):
$ export FOO="bar"
Aquí hay un ejemplo rápido que muestra la diferencia entre las variables exportadas y no exportadas. Para comprender lo que sucede, sepa que sh -c
crea un proceso de shell hijo que hereda el entorno del shell padre.
$ FOO=bar
$ sh -c 'echo $FOO'
$ export FOO
$ sh -c 'echo $FOO'
bar
Nota: Para obtener ayuda sobre los comandos integrados de shell, use help export
. Los elementos integrados de Shell son comandos que forman parte de su shell en lugar de ejecutables independientes como /bin/ls
.
Unix
Los comandos env, set y printenv muestran todas las variables de entorno y sus valores. env y set también se utilizan para establecer variables de entorno y, a menudo, se incorporan directamente en el shell. printenv también se puede usar para imprimir una sola variable dando ese nombre de variable como único argumento para el comando.
En Unix, los siguientes comandos también se pueden usar, pero a menudo dependen de un determinado shell.
export VARIABLE=value # for Bourne, bash, and related shells
setenv VARIABLE value # for csh and related shells
Puedes echar un vistazo a esto en
VARIABLE=value; export VARIABLE
lugar de asignar y exportar a la vez. El set
comando en C Shell es para variables de shell en lugar de variables de entorno; setenv
es la contrapartida de export
. El set
comando en shells derivados de Bourne imprime todas las variables, no solo las variables exportadas (de entorno). Históricamente, al menos, el env
comando está separado del shell (no es un incorporado), aunque fácilmente podría convertirse en un incorporado. Establece el entorno para un comando específico, no el shell que lo ejecuta.
export
es un comando incorporado del bash
shell y otras variantes del shell Bourne . Se utiliza para marcar una variable de shell para exportar a procesos secundarios.