检查过程输出的每一行,并在满足条件时执行操作

时间:2012-10-12 09:46:11

标签: bash unix

我对bash语法和bash本身不太满意。 基本上,我想实时检查进程是否正在创建输出,是否打印了具有特定内容的特定行,以及是否执行某些操作。

    processName | while read myLine; if [ $myLine -eq "Loading X module" ]; then echo 'OMG' fi; done

5 个答案:

答案 0 :(得分:0)

您的语法看起来不错,但是您可能会遇到缓冲输出的问题。

最好让你的processName认为它在终端中运行。这可以使用名为unbuffer

的程序来实现
unbuffer processName | while read myLine; if [ $myLine -eq "Loading X module" ]; then echo 'OMG' fi; done

答案 1 :(得分:0)

引用你的变量:

if [ "$myLine" -eq "Loading X module" ];

答案 2 :(得分:0)

你应该替换这个

if [ $myLine -eq "Loading X module" ];

与     if [“$ myLine”==“正在加载X模块”];

-eq运算符用于整数比较。你应引用$myLine,因为它包含导致测试表达式不起作用的空格。

答案 3 :(得分:0)

你应该可以这样做:

processname | sed -n -e "/^Loading X Module$/p" | sed "s/^.*$/OMG/"

答案 4 :(得分:0)

哦,如果你的问题是“bash:意外令牌'完成'附近的语法错误”,那么DO!

while read myLine; do if [ $myLine -eq "Loading X module" ]; then echo 'OMG' fi; done

如果您发布了正在收到的错误消息,您将获得更多相关答案。