Linux bash脚本未退出
我编写了一个快速bash脚本,它监视日志中的特定字符串,然后退出。但问题是,当我执行“ps-fu$user”时,我仍然可以在脚本返回后运行脚本及其子“tail”进程Linux bash脚本未退出,linux,bash,Linux,Bash,我编写了一个快速bash脚本,它监视日志中的特定字符串,然后退出。但问题是,当我执行“ps-fu$user”时,我仍然可以在脚本返回后运行脚本及其子“tail”进程 #/bin/bash #######主要####### 文件=$1 MSG=“” 读日志行时 做 如果[[“${LOGLINE}”=*“someString”*]];然后 MSG=${LOGLINE} 打破 fi 完成< 上述解决方案连续逐行读取尾线的输出,直到满足if条件。一旦满足要求,整个脚本/流程将退出。了解发生这种情况的原因
#/bin/bash
#######主要#######
文件=$1
MSG=“”
读日志行时
做
如果[[“${LOGLINE}”=*“someString”*]];然后
MSG=${LOGLINE}
打破
fi
完成<
上述解决方案连续逐行读取尾线的输出,直到满足if条件。一旦满足要求,整个脚本/流程将退出。了解发生这种情况的原因非常重要
问题是用于退出循环的“中断”。中断在if语句中。退出在这里更合适,因为您希望一起退出
此外,这部分不是必需的,您只需要以“完成”结束
完成<您最好在读取日志行时使用tail-f$1 |,然后读取echo$(MSG)并在满足条件时退出,而不是中断。。。。或者更坦率地说,由于tail
容易出现在SIGPIPE
上,这是不必要的倒退。虽然此代码可以回答问题,但提供有关如何和/或为什么解决问题的附加上下文将提高答案的长期价值。
#!/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}
#!/bin/bash
####### MAIN #######
FILE=$1
MSG=""
tail -f ${FILE} | while read LOGLINE
do
if [[ "${LOGLINE}" == *"someString"* ]]; then
MSG=${LOGLINE}
exit
fi
done