1

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

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

5 回答 5

0

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

最好让您processName认为它在终端中运行。这可以使用一个名为的程序来实现unbuffer

unbuffer processName | while read myLine; if [ $myLine -eq "Loading X module" ]; then echo 'OMG' fi; done
于 2012-10-12T10:07:26.507 回答
0

引用你的变量:

if [ "$myLine" -eq "Loading X module" ];
于 2012-10-12T17:26:35.637 回答
0

哦,如果您的问题是“bash:意外标记‘完成’附近的语法错误”,那么请执行!

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

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

于 2013-12-03T13:40:09.430 回答
0

你应该能够做到这一点:

processname | sed -n -e "/^Loading X Module$/p" | sed "s/^.*$/OMG/"
于 2013-11-29T17:15:17.890 回答
0

你应该替换这个

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

if [ "$myLine" == "加载 X 模块" ];

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

于 2012-10-15T16:25:58.053 回答