*导出*所有变量从 key=value 文件到 shell
*export* all variables from key=value file to shell
如果我想将环境变量继承给子进程,我会这样做:
export MYVAR=tork
假设我有一个文件 site.conf
包含对变量的赋值(可以包含空格):
EMAIL="dev@example.com"
FULLNAME="Master Yedi"
FOO=bar
现在,每当我打开一个新的 shell(例如,使用 ~/.bashrc
或 ~/.profile
中的一些代码)时,我想处理这个文件,以便任何进程都从中开始新开的shell会通过环境变量继承赋值
显而易见的解决方案是在 site.conf
中的每一行前加上一个 export
并只获取文件的来源。但是我不能这样做,因为文件也被其他一些应用程序(直接)读取,所以格式是固定的。
我试过
cat site.conf | while read assignment
do
export "${assignment}"
done
但这行不通,原因有很多(最重要的是 export
在子 shell 中执行,因此变量永远不会导出到调用的子项shell).
有没有办法以编程方式 export
bash 中的未知变量?
运行 set -a
在获取文件之前。这会标记所有新的和修改后的变量,以便自动导出。
set -a
source site.conf
set +a # Require export again, if desired.
您观察到的问题是管道在子 shell 中执行 export
。您可以简单地通过使用输入重定向而不是管道来避免这种情况。
while read assignment; do
export "$assignment"
done < site.conf
但是,如果(尽管不太可能)您在一行上有多个分配,例如
,这将不起作用
EMAIL="dev@example.com" FULLNAME="Master Yedi"
如果我想将环境变量继承给子进程,我会这样做:
export MYVAR=tork
假设我有一个文件 site.conf
包含对变量的赋值(可以包含空格):
EMAIL="dev@example.com"
FULLNAME="Master Yedi"
FOO=bar
现在,每当我打开一个新的 shell(例如,使用 ~/.bashrc
或 ~/.profile
中的一些代码)时,我想处理这个文件,以便任何进程都从中开始新开的shell会通过环境变量继承赋值
显而易见的解决方案是在 site.conf
中的每一行前加上一个 export
并只获取文件的来源。但是我不能这样做,因为文件也被其他一些应用程序(直接)读取,所以格式是固定的。
我试过
cat site.conf | while read assignment
do
export "${assignment}"
done
但这行不通,原因有很多(最重要的是 export
在子 shell 中执行,因此变量永远不会导出到调用的子项shell).
有没有办法以编程方式 export
bash 中的未知变量?
运行 set -a
在获取文件之前。这会标记所有新的和修改后的变量,以便自动导出。
set -a
source site.conf
set +a # Require export again, if desired.
您观察到的问题是管道在子 shell 中执行 export
。您可以简单地通过使用输入重定向而不是管道来避免这种情况。
while read assignment; do
export "$assignment"
done < site.conf
但是,如果(尽管不太可能)您在一行上有多个分配,例如
,这将不起作用EMAIL="dev@example.com" FULLNAME="Master Yedi"