2015-04-17 41 views
0

我試圖在部署上創建配置文件,然後爲每個配置文件運行我的程序,每次將配置加載到環境變量中。這是最接近我可以這樣做:Bash爲每個配置文件重新運行程序

# ADD CONFIG 
mkdir /cfg 
cat > /cfg/site.cfg << EOF 
name = site   
url = ftp.site.com # Location of data 
username = test   # Optional - Username credential 
password = pass   # Optional - Password credential 
frequency = 1   # Optional - Update once a day 
EOF 

# ADD SCRIPT 
cat > /run.sh << EOF 
for f in cfg 
do 
    echo "Processing $f" 
     #set env from config 
     #run program with env 
done 

如何設置的ENV乏用我的配置運行程序(因此它可以與特定的一組的要求來運行)

回答

1

腳本可以前是這樣的

cat > /run.sh << EOF 
for f in cfg 
do 
    echo "Processing $f" 
     #set env from config 
     #run program with env 
    bash -c "set -a; source $f; ./exec_prog" 
done 

$ f中設置的所有變量將可用於exec_prog。 希望它有幫助。

+0

請問爲什麼使用bash -c命令而不是在引號內運行命令? – Jimmy

+1

如果你不使用bash -c運行,那麼你所有的配置文件都將在當前shell中找到,即在循環結束時,所有配置文件中的變量將成爲當前shell的一部分。所以你目前的炮彈環境受到干擾。 bash -c在新shell中執行命令,因此您的當前shell不受影響。 –

1

在執行主腳本之前,您可以獲取cfg文件的源代碼。

CFGFILE=<Your Corresponding Config File> 


# ADD SCRIPT 
cat > /run.sh << EOF 
CFGFILE=$1 
if [ ! -f "$CFGFILE" ] 
then 
    echo "Error: Unable to source file $CFGFILE" >&2 
    exit 1 
fi 

. $CFGFILE 

    echo "Processing $f" 
    #set env from config 
    #run program with env 
相關問題