2016-02-02 115 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

相關問題