私はシェルスクリプトに関して非常に独特な問題に直面しています。
これがシナリオです
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ループの中断は役に立ちません。「ログアウト完了が検出されました」と「リーク検出が完了しました」がstdoutにエコーされているのがわかりますが、文字列「outsideloop」はエコーされていません。
tail -f
これはサブシェルの作成と関係があると思います。私がやりたいのは、そのサブシェルを終了し、Script2を終了して、制御をScript1に戻すことです。
誰かがこれを行う方法に光を当てることができますか?