在给定时间后停止命令并在Bash中返回其结果

时间:2016-04-09 10:30:24

标签: bash

我需要执行几次对C ++程序的调用,该程序记录来自视频游戏的帧。我有大约1800个测试游戏,其中一些是有效的,有些则没有。

当它们不起作用时,控制台会返回分段错误错误,但是当它们工作时,程序会打开一个窗口并播放游戏,同时它会记录每一帧。

问题在于,当它关闭游戏窗口时,此过程不会结束。

我需要制作一个Bash脚本来测试我拥有的每个游戏,并编写在文本文件中工作的名称以及在另一个文件中不起作用的名称。

目前我尝试使用<style> select option.disabled:disabled{color: #5C3333;background-color: #fff;font-weight: bold;} select option.disabled:hover{color: #5C3333 !important;background-color: #fff;} select option:hover{color: #fde8c4;background-color: #5C3333;} </style> <select> <option class="disabled" disabled>Header1</option> <option>Item1</option> <option>Item1</option> <option>Item1</option> <option class="disabled" disabled>Header2</option> <option>Item2</option> <option>Item2</option> <option>Item2</option> <option class="disabled" disabled>Header3</option> <option>Item3</option> <option>Item3</option> <option>Item3</option> </select> 命令:

timeout

但它似乎没有用,因为它将所有名称都写在同一个文件中。我相信这是因为count=0 # Run for every file in the ROMS folder for filename in ../ROMs/*.bin; do # Increase the counter (( count++ )) # Run the command with a timeout to prevent it from being infinite timeout 5 ./doc/examples/videoRecordingExample "$filename" # Check if execution succeeds/fails and print in a text file if [ $? == 0 ]; then echo "Game $count named $filename" >> successGames.txt else echo "Game $count named $filename" >> failedGames.txt fi done 内的条件是指超时而不是C ++程序本身的执行。

然后我尝试没有if,每次游戏都有效,我手动关闭窗口,然后结果是预期的。我只用了10场比赛就尝试了这个,但是当我用1800全部测试时,我需要它完全自动化。

那么,有没有办法让这个过程自动化?像一些命令停止执行,同时知道它是否成功?

2 个答案:

答案 0 :(得分:0)

而不是

timeout 5 ./doc/examples/videoRecordingExample "$filename"
你可以试试这个:

./doc/examples/videoRecordingExample "$filename" && sleep 5 && pkill videoRecordingExample

答案 1 :(得分:0)

交换超时代码中的参数。它应该是:

timeout 5 "$filename" ./doc/examples/videoRecordingExample 

原因:超时的语法为:

  

超时[OPTION] DURATION COMMAND [ARG] ...

所以COMMAND应该在DURATION之后。在上面的代码中,可能是非可执行文件 videoRecordingExample 将是COMMAND,它可能每次都返回错误。