我不太擅长 bash 语法和 bash 本身。基本上,我想在进程创建输出时实时检查,是否打印了具有特定内容的特定行,以及是否执行某些操作。
processName | while read myLine; if [ $myLine -eq "Loading X module" ]; then echo 'OMG' fi; done
您的语法看起来不错,但您可能会遇到输出缓冲的问题。
最好让您processName
认为它在终端中运行。这可以使用一个名为的程序来实现unbuffer
:
unbuffer processName | while read myLine; if [ $myLine -eq "Loading X module" ]; then echo 'OMG' fi; done
引用你的变量:
if [ "$myLine" -eq "Loading X module" ];
哦,如果您的问题是“bash:意外标记‘完成’附近的语法错误”,那么请执行!
while read myLine; do if [ $myLine -eq "Loading X module" ]; then echo 'OMG' fi; done
如果您发布您收到的错误消息,您将获得更多相关的答案。
你应该能够做到这一点:
processname | sed -n -e "/^Loading X Module$/p" | sed "s/^.*$/OMG/"
你应该替换这个
if [ $myLine -eq "Loading X module" ];
if [ "$myLine" == "加载 X 模块" ];
该-eq
运算符用于整数比较。你应该引用$myLine
,因为它包含导致测试表达式不起作用的空格。