Respuestas:
Este es un extracto de la página de manual de Bash:
export [-fn] [nombre [= palabra]] ...
export -p
Los nombres proporcionados 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 solo necesita la variable en el entorno actual, no es necesario utilizar la exportación.
var=value
Editar:
Sin exportación: solo entorno actual. Con exportación: entorno actual y entornos secundarios.
Aquí hay una demostración del efecto de la exportación en la disponibilidad de una variable en un entorno secundario y que los cambios en el entorno secundario no afectan al principal:
$ var1=123
$ export var2=456
$ echo "parent [$var1] [$var2] [$var3]"
parent [123] [456] []
$ var3=789 bash -c 'echo "child [$var1] [$var2] [$var3]"; var1=111; var2=222; var3=333; echo "child [$var1] [$var2] [$var3]"'
child [] [456] [789]
child [111] [222] [333]
$ echo "parent [$var1] [$var2] [$var3]"
parent [123] [456] []
Después del primer echo ( echo "parent..."
) verá "123" y "456" porque ambos var1
y var2
están activos en el entorno actual. No ve un valor var3
porque todavía no está configurado.
Después de la línea que comienza " var3=...
" no ve un valor var1
porque no se exportó. Usted lo hace ver un valor para var2
, ya que se exporta. Ves un valor para var3
, ya que se fijó para el medio ambiente del niño solamente .
( bash -c
es equivalente a ejecutar un script con el contenido del argumento de la -c
opción. Un script u otro ejecutable o, en este caso, el argumento se bash -c
convierte en un elemento secundario del entorno actual que, como resultado, es, por supuesto, el elemento secundario del niño padre.)
En el "script" se cambian los valores de la variable. Ahora genera esos nuevos valores.
Una vez que finaliza el "script", la ejecución vuelve al entorno principal (la línea de comando en este caso). Después del último eco, verá los valores originales porque los cambios realizados en el entorno secundario no afectan al primario.
export
: hacer que las variables estén disponibles para estos entornos secundarios.
Tu dices eso
Siempre estoy usando el comando de exportación para establecer la variable de entorno
Por cierto, parece que realmente estás tratando de preguntarte cómo haces que una variable ambiental persista. Hacer eso requeriría que coloque su export VAR="foo"
estado de cuenta en su archivo $ HOME / .bash_profile (si está usando bash). Si desea que esa variable de entorno persista para todos los usuarios excepto root, agréguela a / etc / profile. Si desea que también se agregue para el usuario root, configúrelo en /root/.bash_profile.
Esto funcionará para todos los shells de inicio de sesión donde bash es el shell de elección. Para shells que no son de inicio de sesión, debe usar .bashrc. No tengo ideas para ofrecer otros proyectiles: D
exportar es la forma más sencilla de hacerlo, entonces, ¿por qué no dejarlo así?
export VARIABLE=value # for Bourne, bash, and similar shells
setenv VARIABLE value # for csh and similar shells
FOO=BAR; executethisprogram
El programa executethisprogram
NO SABERÁ el valor de la variable FOO
. Por otro lado, cuando se usa: FOO=BAR; export FOO; executethisprogram
El programa executethisprogram
SABERÁ el valor de la variable FOO
.
export FOO
es un comando que marca la variable FOO
para que puedan acceder a ella los procesos secundarios del entorno en el que se emitió el comando. Ese padre puede ser un script o un shell interactivo.
También puedes hacer algo como esto:
VAR=val application
Por ejemplo:
LANG=C ls --help
salida en ingles.
LANG=pl_PL ls --help
salida en polaco (si está disponible).
En el pasado en sh no podías exportar VAL = val. Usted tenia que
VAL=val; export VAL
ls
por ejemplo) sin afectar el valor de esa variable en el entorno actual (principal).
ls
es un elemento secundario del proceso desde el que se ejecutó. Si escribo ls
en el símbolo del sistema, el shell interactivo es el padre y ls
el hijo. Si tengo un script que usa, ls
entonces el script es el padre y ls
el hijo.