bash - instalar - ¿Qué hace "exportar" en la programación de shell?
zsh update (4)
Por lo que puedo decir, la asignación de variables es la misma ya sea precedida o no por "exportar". ¿Para qué es esto?
Bueno, generalmente depende del caparazón. Para bash
, marca la variable como "exportable", lo que significa que se mostrará en el entorno para cualquier proceso secundario que ejecute.
Las variables no exportadas solo son visibles desde el proceso actual (el shell).
Desde la página del hombre bash
:
export [-fn] [name[=word]] ...
export -p
Los nombres suministrados están marcados para la exportación automática al entorno de los comandos ejecutados posteriormente.
Si se da la opción
-f
, los nombres se refieren a funciones. Si no se proporcionan nombres, o si se proporciona la opción-p
, se imprime una lista de todos los nombres que se exportan en este shell.La opción
-n
hace que la propiedad de exportación se elimine de cada nombre.Si un nombre de variable es seguido por
=word
, el valor de la variable se establece enword
.
export
devuelve un estado de salida de 0 a menos que se encuentre una opción no válida, uno de los nombres no es un nombre de variable de shell válido, o-f
se proporciona con un nombre que no es una función.
También puede establecer variables como exportables con el comando typeset
y marcar automáticamente todas las creaciones de variables futuras o modificaciones como tales, con set -a
.
La variable exportada está disponible para todos los procesos dentro de la jerarquía de procesos. Por ejemplo, los datos exportados por proceso hijo están disponibles para el proceso principal y viceversa.
El principal caso de uso de la exportación es compartir datos entre 2 procesos.
hace que la tarea sea visible para los subprocesos.
jcomeau@intrepid:~/rentacoder/bin2txt$ foo=bar
jcomeau@intrepid:~/rentacoder/bin2txt$ bash -c ''echo $foo''
jcomeau@intrepid:~/rentacoder/bin2txt$ export foo
jcomeau@intrepid:~/rentacoder/bin2txt$ bash -c ''echo $foo''
bar
Las variables exportadas (como $HOME
y $PATH
) están disponibles para otros programas. Las variables regulares (no exportadas) no están disponibles para otros programas.
$ env | grep ''^variable=''
$ # No environment variable called variable
$ variable=Hello # Create local (non-exported) variable with value
$ env | grep ''^variable=''
$ # Still no environment variable called variable
$ export variable # Mark variable for export to child processes
$ env | grep ''^variable=''
variable=Hello
$
$ export other_variable=Goodbye # create and initialize exported variable
$ env | grep ''^other_variable=''
other_variable=Goodbye
$
Para obtener más información, consulte la entrada para la export
integrada en el manual de GNU Bash.
Tenga en cuenta que las variables no exportadas estarán disponibles para subcapas ejecutadas mediante ( ... )
y anotaciones similares:
$ othervar=present
$ (echo $othervar; echo $variable; variable=elephant; echo $variable)
present
Hello
elephant
$ echo $variable
Hello
$
La subshell no puede afectar la variable en el shell primario, por supuesto.
Parte de la información sobre las subcapas se puede encontrar en la agrupación de comandos y el entorno de ejecución de comandos en el manual de Bash.