script example bash shell export

example - bash script



* exportar*todas las variables de clave=archivo de valor a shell (2)

Si quiero heredar variables de entorno a procesos secundarios, hago algo como:

export MYVAR=tork

Supongamos que tengo un archivo site.conf contiene asignaciones de valores (que pueden contener espacios) a las variables:

EMAIL="[email protected]" FULLNAME="Master Yedi" FOO=bar

Ahora me gustaría procesar este archivo cada vez que abro un nuevo shell (por ejemplo, con algo de código en ~/.bashrc o ~/.profile ), de modo que cualquier proceso iniciado desde ese nuevo shell abierto heredará las asignaciones a través de variables ambientales.

La solución obvia sería prefijar cada línea en site.conf con una export y simplemente site.conf el archivo. Sin embargo, no puedo hacer esto ya que el archivo también es leído (directamente) por otras aplicaciones, por lo que el formato es fijo.

Probé algo como

cat site.conf | while read assignment do export "${assignment}" done

Pero esto no funciona, por varias razones (la más importante es que la export se ejecuta en una subshell, por lo que la variable nunca se exportará a los elementos secundarios del shell de llamada).

¿Hay una manera de export programación export variables desconocidas en bash?


Ejecute set -a antes de obtener el archivo. Esto marca todas las variables nuevas y modificadas que siguen para exportar automáticamente.

set -a source site.conf set +a # Require export again, if desired.

El problema que observaste es que la tubería ejecuta la export en una subshell. Puede evitar eso simplemente utilizando la redirección de entrada en lugar de una tubería.

while read assignment; do export "$assignment" done < site.conf

Sin embargo, esto no funcionará si (aunque es poco probable) tiene varias asignaciones en una línea, como

EMAIL="[email protected]" FULLNAME="Master Yedi"


El problema es cat site.conf | while read assignment cat site.conf | while read assignment utilizando tuberías.

Las canalizaciones crean un sub-shell, por lo tanto, la variable creada mediante la export se crea en un sub-shell y no está disponible en su shell actual.

Usted puede simplemente hacer:

source $HOME/site.conf

desde su ~/.bashrc para exportar todas las variables y hacer que estén disponibles en shell.