exportar (guardar) e importar (fuente) variables de shell

exportar (guardar) e importar (fuente) variables de shell

Necesito guardar variables de entorno en un archivo y (más adelante) un proceso debería importarlas. Necesito esto para solucionar un programa fooprogque anula el entorno antes de ejecutar un barscript, y necesito algunas variables de entorno en barscript. Así que estoy planeando guardar todas las variables de entorno en un archivo antes de ejecutarlas fooprogramy obtenerlas barscriptde un archivo.

Intenté esto, pero no funciona si hay variables que contienen espacios.

$ env > my_environment
$ . my_environment

Supongo que la forma correcta es juguetear /proc/$$/environy analizar esto de barscriptalguna manera, pero no puedo encontrar la forma correcta de hacerlo.

editar: las comillas o las nuevas líneas también son problemáticas. ¿Cómo podría hacerse para que envars tan problemáticos como los siguientes pudieran obtenerse sin problemas?

PROBLEMATIC='this has double quotes " and single quotes '\'' and even
newlines.

See?'

Respuesta1

$ declare -p > my_environment

Más tarde, dentro barscript:

. my_environment

declare -pgenera variables de entorno en una forma que puede ser ejecutada por el shell, incluidas las comillas y el escape de variables según sea necesario.

$ foobar='"some double-quoted text"'
$ echo $foobar 
"some double-quoted text"
$ declare -p foobar
declare -- foobar="\"some double-quoted text\""

Por cierto, si no desea generar todo su entorno, no es necesario. Simplemente nombre las variables que desea generar en la declare -plínea de comando:

$ declare -p HOME PATH foobar
declare -x HOME="/home/cas"
declare -x PATH="/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11"
declare -- foobar="\"double-quoted-text\""

o canalizar grep -vpara excluir variables específicas que no desea en la salida.

Para obtener solo las variables exportadas:

declare -p -x > my_environment

Para obtener más información, consulte help declareen bash.

información relacionada