我想做一些类似正在运行的进程的日志分析器的事情。假设我运行一个服务器,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
将在终端上输出消息,并将它们发送到管道。