Estoy ejecutando Red Hat Linux Enterprise 5; Siempre estoy usando el comando de exportación para establecer variables de entorno.
¿Existen otras formas de establecer variables de entorno y cuáles son sus ventajas / desventajas?
Estoy ejecutando Red Hat Linux Enterprise 5; Siempre estoy usando el comando de exportación para establecer variables de entorno.
¿Existen otras formas de establecer variables de entorno y cuáles son sus ventajas / desventajas?
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
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
fuente
exportar es la forma más sencilla de hacerlo, entonces, ¿por qué no dejarlo así?
fuente
FOO=BAR; executethisprogram
El programaexecutethisprogram
NO SABERÁ el valor de la variableFOO
. Por otro lado, cuando se usa:FOO=BAR; export FOO; executethisprogram
El programaexecutethisprogram
SABERÁ el valor de la variableFOO
.export FOO
es un comando que marca la variableFOO
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:
Por ejemplo:
salida en ingles.
salida en polaco (si está disponible).
En el pasado en sh no podías exportar VAL = val. Usted tenia que
fuente
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 escribols
en el símbolo del sistema, el shell interactivo es el padre yls
el hijo. Si tengo un script que usa,ls
entonces el script es el padre yls
el hijo.