2013-10-31 95 views
1

從未在bash上編碼,但需要緊急事件。對不起,如果這不是常態,但真的想得到一些幫助。根據標準輸出消息,bash腳本發出嘟嘟聲

我有一些消息被引發到標準輸出,根據消息類型(消息是一個字符串與單詞「找到」)我需要bash腳本發出嗶聲。

到目前爲止,我已經想出了這個。

output=$(command 1) # getting stdout stream? 
    while [ true ]; do 
    if [ "$output" = "found" ]; then # if the stdout has the word "found" 
    echo $(echo -e '\a') # this makes the beep sound 
    fi 
    done 

我不知道在哪裏/如何添加grepawk命令檢查有詞串「找到」,只有返回「發現」,因此,在if條件下它可以檢查針對字。

謝謝!

+0

關於鍾,稍短,更便攜是'printf'\ a''代替'echo $(echo -e'\ a')''。一個簡單的'echo -e'\ a''也可以工作;沒有必要捕獲第一個回聲並重新迴應它。 – chepner

回答

10

你可以做簡單的東西:

command | grep -q 'found' && echo -e '\a' 

如果command輸出包含「發現」的文字,然後grep將與零退出狀態返回,所以echo指令被執行,從而導致嗶嗶聲。

如果輸出不包含「找到」,grep將以狀態1退出,並且不會導致echo

根據您需要使嗶聲工作,只需更換&&之後的任何東西。一般的語法是這樣的:

command | grep -q "$SEARCH" && command_if_found || command_if_not_found 
+5

推薦'grep -q'或'grep>/dev/null'。 –

+0

謝謝,這更有意義。所以我添加到腳本中,但看起來該命令沒有從stdout獲取任何消息。你知道什麼是獲得stdout消息的正確方法嗎?這是我有#/ bin/bash SEARCH =「found」while [true];做$(command | grep -q「$ SEARCH」&& echo -e'\ a')done – sylvian

+0

你不需要循環。嘗試將其分解成組件。查看'command'的輸出,然後在'command | grep'found',等等。也許嘗試看看'command>/dev/null'這樣的東西 - 也許'command'輸出到stderr? – cmbuckley