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

Car*_*rós 2 bash environment-variables

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

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

$ env > my_environment
$ . my_environment
Run Code Online (Sandbox Code Playgroud)

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

编辑:引号或换行符也有问题。怎么做才能使像下面这样有问题的环境可以毫无问题地获得?

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

See?'
Run Code Online (Sandbox Code Playgroud)

cas*_*cas 6

$ declare -p > my_environment
Run Code Online (Sandbox Code Playgroud)

后来,里面barscript

. my_environment
Run Code Online (Sandbox Code Playgroud)

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

. my_environment
Run Code Online (Sandbox Code Playgroud)

顺便说一句,如果您不想输出整个环境,则不必。只需命名要在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\""
Run Code Online (Sandbox Code Playgroud)

或通过管道grep -v排除输出中不需要的特定变量。

仅获取导出的变量:

declare -p -x > my_environment
Run Code Online (Sandbox Code Playgroud)

欲了解更多信息,请参阅help declarebash