Necesito guardar variables de entorno en un archivo y (más adelante) un proceso debería importarlas. Necesito esto para solucionar un programa fooprog
que 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 fooprogram
y obtenerlas barscript
de 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/$$/environ
y analizar esto de barscript
alguna 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 -p
genera 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 -p
lí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 -v
para 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 declare
en bash
.