【发布时间】:2012-12-05 18:33:03
【问题描述】:
我在使用 shell 脚本时遇到了一个非常特殊的问题。
这里是场景
Script1(在后台生成)--> Script2
Script2 有如下代码
function check_log()
{
logfile=$1
tail -5f ${logfile} | while read line
do
echo $line
if echo $line|grep "${triggerword}";then
echo "Logout completion detected"
start_leaks_detection
triggerwordfound=true
echo "Leaks detection complete"
fi
if $triggerwordfound;then
echo "Trigger word found and processing complete.Exiting"
break
fi
done
echo "Outside loop"
exit 0
}
check_log "/tmp/somefile.log" "Logout detected"
现在 while 循环中的中断在这里没有帮助。我可以看到“检测到注销完成”以及“泄漏检测完成”在标准输出上回显,但不是字符串“外部循环”
我假设这与 tail -f 创建子外壳有关。我想要做的是,退出该子外壳并退出 Script2 以将控制权返回给 Script1。
有人可以解释一下如何做到这一点吗?
【问题讨论】:
-
当你管道某些东西时,你隐含地创建了一个无法修改父环境的叉子(一个孩子)......看看stackoverflow.com/questions/13763942/…
-
错误链接@F——这与stackoverflow.com/questions/7178888/…相关得多
-
@Neeraj 您可能希望使用
case语句将触发词与输入行进行比较,而不是为每个输入行分叉grep和echo管道。 -
@GregA.Woods 能否请您添加一个使用带有尾部的 case 语句的示例 sn-p 的答案? (我是菜鸟,因此要求)
-
看看我的答案的编辑版本。