我对bash语法和bash本身不太满意。 基本上,我想实时检查进程是否正在创建输出,是否打印了具有特定内容的特定行,以及是否执行某些操作。
processName | while read myLine; if [ $myLine -eq "Loading X module" ]; then echo 'OMG' fi; done
答案 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
如果您发布了正在收到的错误消息,您将获得更多相关答案。