我编写了一个快速BASH脚本,它为特定字符串监视日志,然后退出。但问题是,当我执行“ps-fu$user”时,我仍然可以在脚本返回后运行脚本及其子“tail”进程。
#!/bin/bash
####### MAIN #######
FILE=$1
MSG=""
while read LOGLINE
do
if [[ "${LOGLINE}" == *"someString"* ]]; then
MSG=${LOGLINE}
break
fi
done < <(tail -f ${FILE})
pkill -P $$ tail
echo ${MSG}
我从一个应用程序向它传递一个日志文件,该应用程序将不断被写入。当我运行这个脚本时,它会找到字符串的第一个实例,并将其回传到STDUT和退出。除了尾巴的过程似乎没有被杀死,也没有脚本本身。
最佳答案
理解为什么会发生这种情况是很重要的。
问题是“中断”用于退出循环。中断在if语句中。退出将更适合这里,因为你想退出所有在一起。
这个部分也不需要,你只需要以“完成”结束
完成<<(tail-f${file})
你从来没有“完成”与“尾巴”,因为你从来没有要求它在一开始。
由于我假定您的日志在脚本开始时未被中继,所以您正在尾随新内容,因此您应该将管道或/或写入尾部到临时文件,然后在脚本的出口处删除。两种都可以。
关于linux - bash脚本没有退出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44831648/