不断检查Bash命令的输出

时间:2017-05-03 12:32:27

标签: bash

我有一个调用无限命令的脚本,该命令输出数据并且永远不会停止。我想检查该命令是否输出特定字符串,说"成功!",然后我想停止它并移动到我脚本的下一行。

这怎么可能?

提前致谢。

修改

#!/bin/bash

xrandr --output eDP-1-1 --mode 2048x1536
until steam steam://run/730 | grep "Game removed" ; do
        :
done
echo "Success!"
xrandr --output eDP-1-1 --mode 3840x2160

我的所有脚本都是改变分辨率,启动Steam游戏,然后等待输出中显示消息,表明游戏已关闭,并将分辨率更改回原来的状态。

我每次都会提到我提到的消息,但Steam进程仍在运行。这可能是问题吗?

如果我手动关闭Steam,那么脚本就像我想要的那样继续。

1 个答案:

答案 0 :(得分:4)

您需要使用until built-in构造,

until command-name | grep -q "Success!"; do
   :
done

这将等待无限期,直到您想要的字符串出现在命令的stdout中,此时grep成功并退出循环。 -q中的grep标志指示它以无声方式运行它,:是无操作的简写。

untilwhile之间的区别 - 前者运行循环内容,直到使用的命令/运算符的退出代码变为0即成功,此时退出并{ {1}}反之亦然。