gpt4 book ai didi

linux - 用于运行命令的 Bash 脚本

转载 作者:太空宇宙 更新时间:2023-11-04 09:21:56 25 4
gpt4 key购买 nike

我正在尝试编写一个 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:记住eval is evil并且应该避免。

关于linux - 用于运行命令的 Bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40922684/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com