[英]Bash Script for running commands
我正在嘗試編寫一個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腳本的新手。 有人可以指出是什么問題嗎? 謝謝。
更改
cmdRun="$mainDirCfg $outFile $2 ${benchmark[$i]}"
$cmdRun
至
eval "$mainDirCfg $outFile $2 ${benchmark[$i]}"
這是因為您在${benchmark[1]}
中的重定向被視為命令參數,就像被引用一樣,而不是真正的重定向。 您的第二個程序不會終止,因為它會永遠等待從stdin中讀取某些內容,由於重定向不起作用,您必須鍵入一些內容(鍵入Ctrl-D關閉stdin,腳本將繼續)。
PS:請記住, 評估是邪惡的 ,應該避免。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.