Pregunta Variables de entorno global en un script de shell


¿Cómo establecer una variable de entorno global en un script bash?

Si hago cosas como

#!/bin/bash
FOO=bar

...o

#!/bin/bash
export FOO=bar

... los vars parecen permanecer en el contexto local, mientras que me gustaría seguir utilizándolos después de que el script haya terminado de ejecutarse.


76
2017-09-23 06:25


origen


Respuestas:


Ejecute su script . 

. myscript.sh

Esto ejecutará la secuencia de comandos en el entorno de shell actual.

export determina qué variables estarán disponibles para los nuevos procesos, por lo que si dices

FOO=1
export BAR=2
./runScript.sh

entonces $BAR estará disponible en el entorno de runScript.sh, pero $FOO no lo hará


124
2017-09-23 06:28



Cuando tú correr una secuencia de comandos de shell, se hace en un subconjunto, por lo que no puede afectar el entorno del shell principal. Desea obtener el script haciendo:

. ./setfoo.sh

Esto lo ejecuta en el contexto de corriente shell, no como un sub cáscara.

Desde la página del hombre bash:

. nombre de archivo [argumentos]
nombre de archivo fuente [argumentos]

Leer y ejecutar comandos desde el nombre del archivo en el shell actual   entorno y devolver el estado de salida del último comando ejecutado   de nombre de archivo

Si nombre de archivo no contiene una barra inclinada, los nombres de archivo en RUTA se utilizan para   encuentre el directorio que contiene el nombre del archivo.

El archivo buscado en PATH no necesita ser ejecutable. Cuando bash no es   en modo POSIX, se busca el directorio actual si no se encuentra ningún archivo   en RUTA.

Si la opción sourcepath al comando builtin shopt está desactivada,   la RUTA no se busca.

Si se proporcionan argumentos, se convierten en los parámetros posicionales   cuando se ejecuta el nombre de archivo

De lo contrario, los parámetros posicionales no se modifican. El estado de devolución   es el estado del último comando salido dentro del script (0 si no   los comandos se ejecutan) y falso si no se encuentra el nombre del archivo o no se puede   ser leido.


47
2017-09-23 06:29



source myscript.sh también es factible

Descripción para el comando de Linux source:

source is a Unix command that evaluates the file following the command, 
as a list of commands, executed in the current context

6
2017-09-01 00:48



#!/bin/bash
export FOO=bar

o

#!/bin/bash
FOO=bar
export FOO

hombre de exportación:

El shell dará el atributo de exportación a las variables correspondientes a los nombres especificados, lo que hará que estén en el entorno de los comandos ejecutados posteriormente. Si el nombre de una variable es seguido por = palabra, entonces el valor de esa variable se establecerá en palabra.


4
2017-09-23 06:33



FOO=bar
export FOO

-3
2017-09-23 06:27