我一直面對shell腳本的一個非常奇怪的問題。使用subshell中的尾部連同while/break不會退出循環
下面是這種情況
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
創建子外殼。我想要做的是,退出該子shell以及退出Script2以將控制權返回給Script1。
有人可以請說明如何做到這一點?
當你管道的東西,你隱式創建一個無法修改父母的環境的叉子(小孩)...看看http://stackoverflow.com/questions/13763942/bash-why-piping-input -to-read-only-works-when-fed-into-while-read-const/13764018#13764018 –
錯誤的鏈接@F - 這更關係到http://stackoverflow.com/questions/7178888/grep -q-not-exiting-with-tail -f –
@Neeraj您可能希望使用case語句來比較觸發器字與輸入行,而不是爲每個輸入分支'grep'和'echo'管道線。 –