如何测试标准输出是否与模式匹配,但仍打印它



我想做一些类似正在运行的进程的日志分析器的事情。假设我运行一个服务器,stdout 通过管道传递到 bash 脚本,其中 IF 语句在哪里。如果字符串"somethings"出现在输出中,则脚本会杀死服务器。如果没有,那么它通常会打印标准输出并且仍在运行。

例:

./server | if.bash

if.bash的内容:

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

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

循环读取输出:

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

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

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

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

最新更新