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

boo*_*ull 6 linux bash sleep ctrl

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

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

control_c()
{
  cleanup
  exit 0
}

trap control_c SIGINT
Run Code Online (Sandbox Code Playgroud)

但是由于我的脚本完成得非常快,我永远不会故意终止它,因此它永远不会捕获 CTRL+c并运行清理代码。

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

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

Cha*_*ffy 10

假设您已连接到 TTY:

# idle waiting for abort from user
read -r -d '' _ </dev/tty
Run Code Online (Sandbox Code Playgroud)

  • @123,这可能是必要的,这取决于脚本正在做什么。例如,从 stidn 读取规则,并将其作为 `yourscript &lt;firewall-rules` 运行,然后 `read` 需要 `&lt;/dev/tty`。如果没有指定环境(因为它没有指定),我将假设最坏的情况(或者让我*必须*假设某些事情的情况,例如 TTY 的可用性,明确的)。 (2认同)

nob*_*bar 5

以下将等待 Ctrl-C,然后继续运行:

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