如何测试stdout是否与模式匹配,但仍然可以打印?

时间:2018-04-20 19:26:30

标签: bash pipe

我想做一些像运行过程的日志分析器。让我们说我运行一个服务器,stdout通过管道传递给bash脚本,其中是IF语句。如果字符串" somethings"出现在输出中,然后脚本杀死服务器。如果没有,则通常打印标准输出并仍在运行。

示例:

./server | if.bash

if.bash的内容:

if grep 'somethings'; then
     kill app
else
     echo server output
fi

上面的代码成功运行了测试,但没有打印原始标准输出。如何确保仍然打印内容?

1 个答案:

答案 0 :(得分:2)

循环读取输出:

while read -r line; do
    if [[ $line =~ something ]];
    then
        kill app
        break
    else
        printf "%s\n" "$line"
    fi
done

另一个选择是在运行脚本时使用tee

./server | tee /dev/tty | if.bash

tee将在终端上输出消息并将它们发送到管道。