我使用bash并拥有一个名为x.config
的文件,其中包含以下内容:
MY_VAR=Something1
ANOTHER=Something2
要将这些作为环境变量加载,我只使用source:
$ source x.config
但如果MY_VAR
被调用MY-VAR
,这不起作用:
MY-VAR=Something1
ANOTHER=Something2
如果我做同样的事情,我会得到:
x.config:1: command not found: MY-VAR=Something1
我试图逃避-
以及其他很多事情,但我已经陷入困境。有没有人知道这方面的解决方法?
答案 0 :(得分:3)
可能适合您的纯bash
解决方法是使用env
重新运行脚本来设置环境。将其添加到脚本的开头。
if [[ ! -v myscript_env_set ]]; then
export myscript_env_set=1
readarray -t newenv < x.config
exec env "${newenv[@]}" "$0" "$@"
fi
# rest of the script here
这假定x.config
不包含除变量赋值之外的任何内容。如果myscript_env_set
不在当前环境中,请将其放在那里,以便下一次调用会跳过此块。然后将分配读入数组以传递给env
。使用exec
将当前进程替换为脚本的另一个调用,但是在环境中使用所需的变量。
答案 1 :(得分:1)
environment variable中的短划线(-
)不可移植,正如您所注意到的,会导致很多问题。你不能从bash中设置这些。 修复您要调用的应用程序。
话虽如此,如果您无法更改目标应用,可以从python执行此操作:
#!/usr/bin/python
import os
with open('x.config') as f:
for line in f:
name, value = line.strip().split('=')
os.environ[name] = value
os.system('/path/to/your/app')
这是一个非常简单的配置阅读器,对于更复杂的语法,您可能希望使用ConfigParser
。