uml*_*ute 20 bash shell export environment-variables
如果我想将环境变量继承到子进程,我会执行以下操作:
export MYVAR=tork
Run Code Online (Sandbox Code Playgroud)
假设我有一个site.conf
包含赋值给变量的值(可以包含空格)的文件:
EMAIL="dev@example.com"
FULLNAME="Master Yedi"
FOO=bar
Run Code Online (Sandbox Code Playgroud)
现在我想在每次打开一个新shell时处理这个文件(例如,在~/.bashrc
or中有一些代码~/.profile
),这样从新打开的shell中启动的任何进程都将通过环境变量继承赋值.
显而易见的解决方案是为每行site.conf
添加一个export
并且只是源文件.但是我不能这样做,因为文件也被其他一些应用程序读取(直接),所以格式是固定的.
我试过类似的东西
cat site.conf | while read assignment
do
export "${assignment}"
done
Run Code Online (Sandbox Code Playgroud)
但由于各种原因(最重要的export
是在子shell中执行,因此该变量永远不会导出到调用shell的子节点),这不起作用.
有没有办法以编程方式export
在bash中使用未知变量?
che*_*ner 36
set -a
在采购文件之前运行.这将标记自动导出的所有新变量和修改变量.
set -a
source site.conf
set +a # Require export again, if desired.
Run Code Online (Sandbox Code Playgroud)
您观察到的问题是管道export
在子shell中执行.您可以通过使用输入重定向而不是管道来避免这种情况.
while read assignment; do
export "$assignment"
done < site.conf
Run Code Online (Sandbox Code Playgroud)
但是,如果(虽然不太可能)您在一行上有多个赋值,例如
EMAIL="dev@example.com" FULLNAME="Master Yedi"
Run Code Online (Sandbox Code Playgroud)