2016-02-02 68 views
0

我使用bash和有一个名为x.config文件,该文件包含以下内容:源文件中包含环境变量,包括“破折号”字符在bash中?

MY_VAR=Something1 
ANOTHER=Something2 

要加载这些作为环境变量我只是用来源:

$ source x.config 

但是,这并不工作,如果MY_VAR被称为​​:

MY-VAR=Something1 
ANOTHER=Something2 

如果我做同样的事情,我得到:

x.config:1: command not found: MY-VAR=Something1 

我试过转义-和很多其他的东西,但我卡住了。有没有人知道这个解决方法?

+3

变量名称不能包含连字符 – anubhava

+0

为什么你不能使用下划线? – 123

+0

那么我知道你可以逃避它,如果你env'我的VAR = ..',所以我想必须有一个解决方法? – Johan

回答

3

可能适用于您的纯粹bash解决方法是使用env重新运行该脚本以设置环境。将其添加到脚本的开头。

if [[ ! -v myscript_env_set ]]; then 
    export myscript_env_set=1 
    readarray -t newenv < x.config 
    exec env "${newenv[@]}" "$0" "[email protected]" 
fi 

# rest of the script here 

这假定x.config不包含除变量赋值任何东西。如果myscript_env_set不在当前环境中,请将其放在那里以便下一次调用跳过此块。然后将分配读入数组传递至env。使用exec可以用另一个脚本调用替换当前进程,但在环境中使用所需的变量。

1

environment variable中的破折号(-)不是便携式的,正如您注意到的那样,会导致很多问题。你不能从bash中设置这些。 修复你想调用的应用程序

话虽这么说,如果你不能改变目标应用程序,你可以从蟒蛇做到这一点:

#!/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

相关问题