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)
$ 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 declare
在bash
。