2015-04-17 55 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 
相关问题