我有一个像这样的 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。