监视bash脚本不会终止

Dan*_*iil 1 linux bash

我有这个bash脚本,其工作是监视日志文件是否出现某一行.找到后,脚本将发出电子邮件警告,然后自行终止.由于某种原因,它继续运行.我怎样才能确保终止下面的bash脚本:

#!/bin/sh

tail -n 0 -f output.err | grep --line-buffered "Exception" | while read line
do
    echo "An exception has been detected!" | mail -s "ALERT" monitor@company.com
    exit 0
done
Run Code Online (Sandbox Code Playgroud)

Ark*_*nez 5

你正在打开一个子shell,while read并且子shell是谁退出,而不是正确的.

在进入while循环之前尝试:

SHELLPID=$$
Run Code Online (Sandbox Code Playgroud)

然后在循环中:

kill $SHELLPID
exit 0
Run Code Online (Sandbox Code Playgroud)

或者将循环更改为不使用子shell.

由于父脚本总是处于tail -f永无止境的状态,我认为除了从内部子shell中删除它之外别无选择.