我需要将环境变量保存到文件中,并且(稍后)进程应该导入它们。我需要这个来解决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
。