(standard_in)1:bash脚本中的语法错误

时间:2016-07-05 10:06:09

标签: bash batch-file

我正在尝试编写一个批处理脚本,它将两个.cpp文件作为命令行参数,编译它们然后测量它们的执行时间。

#!/bin/bash
error=0
g++ -O2 -std=c++11 $1 -o __gen
((error|=$?))
g++ -O2 -std=c++11 $2 -o __run
((error|=$?))
if (($error != 0)); then
    echo 'Compilation failed'
    rm __gen __run
    exit 1;
fi

clear
echo 'Compilation was succesful'

time=0.0
until (( `bc <<< "$time > 1.5"` )); do
    ./__gen > in
    time=$(/usr/bin/time -f "%e" ./__run < in > out)
done

第一个.cpp是测试生成器的源代码。它为第二个程序生成输入。我希望批次在第二次程序第一次运行超过1.5秒时停止。

当我运行脚本时,我得到(standard_in) 1: syntax error。 你能救我吗?

1 个答案:

答案 0 :(得分:0)

此命令:

/usr/bin/time -f "%e" ./__run < in > out

什么都不输出(因为整个stdout被重定向到文件out,而time命令将时间输出到stderr)。 因此,在循环的第一次迭代之后,变量time变空。 然后"$time > 1.5"评估为> 1.5,导致bc中的语法错误(>的左操作数丢失)。

一种解决方案是使用-o的{​​{1}}选项将时间写入临时文件,然后将该文件读入变量。 这也将消除程序/usr/bin/time也向stderr输出数据的可能问题,这将再次破坏__run的输入。

相关问题