如何在Bash中让Ctrl+C始终正确地退出while循环?

编程语言 2026-07-10

如果我在Bash中运行 bash func() { while ! foo bar; do :; done },再执行 func,然后按下Ctrl+C,常常不会退出。

我该如何编写 func,以确保Ctrl+C总能正确终止?

解决方案

#!/bin/bash

function close {
  pkill -9 -P $PID
}
trap close SIGINT SIGABRT SIGTERM

function myfoo {
   foo bar &
   PID=$!
   wait $PID
   return $?
}

func() {
 while myfoo ; do
   : 
 done
}

foo bar 会被放到后台执行,这样按下Ctrl+C时脚本就能退出。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章