Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux bash脚本未退出_Linux_Bash - Fatal编程技术网

Linux bash脚本未退出

Linux bash脚本未退出,linux,bash,Linux,Bash,我编写了一个快速bash脚本,它监视日志中的特定字符串,然后退出。但问题是,当我执行“ps-fu$user”时,我仍然可以在脚本返回后运行脚本及其子“tail”进程 #/bin/bash #######主要####### 文件=$1 MSG=“” 读日志行时 做 如果[[“${LOGLINE}”=*“someString”*]];然后 MSG=${LOGLINE} 打破 fi 完成< 上述解决方案连续逐行读取尾线的输出,直到满足if条件。一旦满足要求,整个脚本/流程将退出。了解发生这种情况的原因

我编写了一个快速bash脚本,它监视日志中的特定字符串,然后退出。但问题是,当我执行“ps-fu$user”时,我仍然可以在脚本返回后运行脚本及其子“tail”进程

#/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