如何从子shell中终止进程

如何从子shell中终止进程

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

相关内容