导出(保存)和导入(源)shell 变量

导出(保存)和导入(源)shell 变量

我需要将环境变量保存到文件中,并且(稍后)进程应该导入它们。我需要这个来解决fooprog在执行 a 之前使环境无效的程序barscript,并且我需要 中的一些环境变量barscript。因此,我计划在执行之前将所有环境变量保存到文件中fooprogram,并barscript从文件中获取它们。

我尝试了这个,但如果有包含空格的变量,它不起作用。

$ env > my_environment
$ . my_environment

我想正确的方法是以某种方式摆弄/proc/$$/environ和解析它barscript,但我找不到正确的方法。

编辑:引号或换行符也有问题。如何才能毫无问题地获取像以下这样有问题的环境变量?

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

See?'

答案1

$ declare -p > my_environment

后来,里面barscript

. my_environment

declare -p以 shell 可执行的形式输出环境变量,包括根据需要引用和转义变量。

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

顺便说一句,如果您不想输出整个环境,则不必这样做。只需命名要在命令行上输出的变量declare -p

$ 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\""

或通过管道grep -v排除您不希望在输出中出现的特定变量。

仅获取导出的变量:

declare -p -x > my_environment

有关更多信息,请help declare参阅bash

相关内容