空闲 bash 脚本直到记录 CTRL+c 事件

Idle bash script until CTRL+c event is logged

我有一个 bash 脚本可以完成一些工作,而且速度相当快。 然后它应该处于空闲状态,直到用户决定终止它,然后是一些清理代码。

这就是我使用以下代码捕获 CTRL+c 事件的原因:

control_c()
{
  cleanup
  exit 0
}

trap control_c SIGINT

但是由于我的脚本完成得非常快,所以我从来没有故意终止它,所以它永远不会 捕获 CTRL+c 和 运行 clean-上代码。

我想我可以实现一个无休止的 do while 循环,在脚本末尾添加 sleep,但我认为有更好的解决方案。

如何在 bash 中空闲脚本,等待 CTRL+c 事件?

假设您已连接到 TTY:

# idle waiting for abort from user
read -r -d '' _ </dev/tty

下面会等待Ctrl-C,然后继续运行:

( trap exit SIGINT ; read -r -d '' _ </dev/tty ) ## wait for Ctrl-C
echo script still running...

我在使用 read -r -d '' _ </dev/tty 时遇到了问题,我将它放在脚本中以防止它退出并杀死作业。我有另一个使用 dialog 并将第一个脚本调用为作业的脚本,当脚本到达 read -r -d '' _ </dev/tty 时,父脚本对话框有一个非常奇怪的行为,就像有人不断地按下 Esc键,这会使对话框尝试退出。

我推荐的是使用 sleep 你可以睡很长时间,比如 999 天 sleep 999d 如果你需要确保它永远不会停止,你可以把它放在一个 while 循环中.