我有一个调用无限命令的脚本,该命令输出数据并且永远不会停止。我想检查该命令是否输出特定字符串,说"成功!",然后我想停止它并移动到我脚本的下一行。
这怎么可能?
提前致谢。
修改
#!/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,那么脚本就像我想要的那样继续。
答案 0 :(得分:4)
您需要使用until
built-in构造,
until command-name | grep -q "Success!"; do
:
done
这将等待无限期,直到您想要的字符串出现在命令的stdout
中,此时grep
成功并退出循环。 -q
中的grep
标志指示它以无声方式运行它,:
是无操作的简写。
until
和while
之间的区别 - 前者运行循环内容,直到使用的命令/运算符的退出代码变为0
即成功,此时退出并{ {1}}反之亦然。