以下のbash機能があります。
listen_to_thing(){
cat /tmp/srv-output | while read line; do
echo "catted: $line"
if [[ "$line" == 'EOF' ]]; then
exit 0; ## I want to exit out of the function upon this event
fi
done;
}
キーワードを受け取ったら、catプロセスを終了してbash機能を完了したいと思います。コマンドラインでSIGINTを使用してbash機能を終了できますが、読み取りループ内でプログラム的にbash機能を終了する方法はありますか?
答え1
ファイルがありませんcat
。すべてが正常です。
listen_to_thing() {
while read line; do
echo "read: $line"
case "$line" in
EOF) return 0 ;; # Return out of the function upon this event
esac
done </tmp/srv-output
}
$line
埋め込みファイルと終了したばかりのファイルを区別するには、EOF
ゼロ以外の状態を返すだけです。
答え2
私のテストによると、これはうまくいくと思います。
listen_to_thing(){
(
export kill_this="$BASHPID"
cat /tmp/srv-output | while read line; do
echo "catted: $line"
if [[ "$line" == 'EOF' ]]; then
kill -9 "$kill_this"
exit 0;
fi
done;
)
}
ここで、$BASHPID は現在のプロセスコンテキストの PID です。