Leí aquí que el propósito de export
un shell es hacer que la variable esté disponible para los subprocesos iniciados desde el shell.
Sin embargo, también he leído aquí y aquí que "los procesos heredan su entorno de sus padres (el proceso que los inició)".
Si este es el caso, ¿por qué necesitamos export
? ¿Qué me estoy perdiendo?
¿Las variables de shell no son parte del entorno por defecto? ¿Cuál es la diferencia?
fuente
set -k
es para que se pueda usarcmd ENVVAR=value
en lugar deENVVAR=value cmd
, eso no funcionará en su ejemplo a menos queset -k
se haya ejecutado antes de invocarf
. Además, no hay muchos shells que lo admitan hoy en día y solo por compatibilidad con el shell Bourne. En el shell Bourne (o Korn), eso no funcionaría para las funciones. Y debido a que afecta el análisis del shell, tiene que estar vigente en el momento en que el shell lee el código que lo utiliza allí.set -a
Hay una diferencia entre las variables de shell y las variables de entorno. Si define una variable de shell sin
export
utilizarla, no se agrega al entorno de procesos y, por lo tanto, no se hereda a sus elementos secundarios.Usando
export
le dice al shell que agregue la variable del shell al entorno. Puede probar esto usandoprintenv
(que solo imprime su entornostdout
, ya que es un proceso secundario donde ve el efecto deexport
las variables):fuente
Una variable, una vez exportada, es parte del entorno.
PATH
se exporta en el propio shell, mientras que las variables personalizadas se pueden exportar según sea necesario. Usando un código de configuración:Comparar
Con
Como
foo
el shelltest2.sh
no lo exporta y nunca lo exportó, no fue parte del entorno desubshell.sh
la última ejecución.fuente