2017-05-03 151 views
1

我有一個腳本,它調用一個輸出數據並永不停止的無限命令。我想檢查一下這個命令是否輸出一個特定的字符串,比如說「Success!」,然後我想停止它並移動到腳本的下一行。不斷檢查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,那麼腳本將繼續像我想要的那樣。

回答

4

您需要使用until built-in構建此,

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

這將等待無限期,直到你想要的字符串出現在你的命令的stdout,此時grep成功並退出循環。 grep中的-q標誌指示它無聲運行,:是無操作的簡稱。 untilwhile之間


差異 - 前者運行循環內容,直到所用的命令/操作者的出口代碼變得0即成功,在該點它退出和while確實的是,反之亦然。

+0

感謝您的快速回復!如果我在到達該字符串後想「回顯」某些內容,該怎麼辦?我應該把它代替':'還是'完成'後? – AnDrOiD

+0

@安德魯伊:它應該在'完成'之後,記住':'部分是在沒有任何事情發生的無限循環中。您也可以通過睡眠節省幾個CPU週期! – Inian

+0

在完成之後放置它是我嘗試的第一件事,但由於某種原因它不起作用。我拿下了'-q',這樣我就可以確定它真的到達了字符串,並且它確實如此。可能是什麼問題? – AnDrOiD