我正在尝试读取一个configuration文件,然后将configuration文件的“部分”放到一个bash脚本的数组中,然后运行一个命令,然后再次重新configurationconfigs,然后继续执行,直到configuration文件的末尾。
这是一个示例configuration文件:
PORT = “5000” USER = “没有人” PATH = “1” OPTIONS = “” PORT = “5001” USER = “没有人” PATH = “1” OPTIONS = “” PORT = “5002” USER = “没有人” PATH = “1” OPTIONS = “”
我想让bash脚本在第一个“部分”中读取,将其引入到脚本中,然后运行以下命令:
scriptname -p $PORT -u $USER -P $PATH -o $OPTIONS
但是,我希望根据configuration文件中有多less“部分”来执行“部分”的每次迭代,然后运行带有相应configuration设置的命令并将其应用于最终命令。 所以如果是从上面的configuration文件读取,输出将是:
scriptname -p $ PORT -u $ USER -P $ PATH -o $ OPTIONS scriptname -p $ PORT -u $ USER -P $ PATH -o $ OPTIONS scriptname -p $ PORT -u $ USER -P $ PATH -o $ OPTIONS
反过来看起来像这样:
scriptname -p 5000 -u nobody -P 1 -o“” scriptname -p 5001 -u nobody -P 1 -o“” scriptname -p 5002 -u没有人-P 1 -o“”
提前致谢。
#!/bin/bash if [[ $# -ne 1 ]]; then echo "Usage: $0 script.cfg" >&2 exit 1 fi function runscript() { scriptname -p $PORT -u $USER -P $PATH -o $OPTIONS } while read LINE; do if [[ -n $LINE ]]; then declare "$LINE" else runscript fi done < "$1" runscript
如果你想同时在后台运行脚本,试试这个:
function runscript() { nohup scriptname -p $PORT -u $USER -P $PATH -o $OPTIONS &> /dev/null & }
&
最后使它们在后台运行, nohup
确保它们在shell退出时不会被终止。 最终效果是将脚本变成守护进程,以便不管父脚本发生什么情况,都可以在后台继续运行。
#!/bin/bash awk 'BEGIN{ FS="\n";RS=""} { for(i=1;i<=NF;i++){ gsub(/.[^=]*=|\042/,"",$i) } print "scriptname -p "$1" -u "$2" -P "$3" -o "$4 }' file | bash
假设部分之间只有一条空行:
cat <yourfile> | while read ; do if [ -z "$REPLY" ] ; then scriptname -p $PORT -u $USER -P $PATH -o "$OPTIONS" else eval "$REPLY" # NOTE: eval is evil fi done