空闲 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 循环中.
我有一个 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 循环中.