2013-10-31 68 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