用于运行命令的Bash脚本

时间:2016-12-02 00:13:02

标签: linux bash shell

我正在尝试编写一个Bash脚本来运行模拟并将输出文件保存在不同的目录中。我到目前为止的代码是:

mainDirCfg="/home/software/simplesim/simplesim-3.0/sim-outorder -config ../$1"
outFile="-redir:sim"
declare -a benchmark=("bzip2_base.i386-m32-gcc42-nn dryer.jpg" "equake_base.pisa_little <inp.in> inp.out")
declare -a directory=("bzip2" "equake")
i=0
for d in "${directory[@]}"
do
  cd $d
  cmdRun="$mainDirCfg $outFile $2 ${benchmark[$i]}"
  # above is the command to be run
  $cmdRun
  cd ..
  ((i++))
done

上述脚本在第一次迭代时正常运行,而不是第二次迭代。但是,在命令提示符下单独运行命令时,我得到了预期的输出。我为第二次迭代运行的命令如下:

/home/software/simplesim/simplesim-3.0/sim-outorder -config ../tmp.cfg -redir:sim tmp9.out equake_base.pisa_little <inp.in> inp.out

我是bash脚本新手。有人可以指出问题可能是什么?感谢。

1 个答案:

答案 0 :(得分:2)

更改

cmdRun="$mainDirCfg $outFile $2 ${benchmark[$i]}"
$cmdRun

eval "$mainDirCfg $outFile $2 ${benchmark[$i]}"

这是因为${benchmark[1]}中的重定向被视为命令参数,就好像它们被引用一样,而不是真正的重定向。你的第二个程序没有终止,因为它会永远等待从stdin读取的东西,因为重定向不起作用你需要输入的东西(键入Ctrl-D来关闭stdin,你的脚本将继续)。

PS:记住eval is evil,应该避免。