获取包含环境变量的文件,包括" dash" bash中的角色?

时间:2016-02-02 11:00:44

标签: bash environment-variables

我使用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

我试图逃避-以及其他很多事情,但我已经陷入困境。有没有人知道这方面的解决方法?

2 个答案:

答案 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