【发布时间】:2013-11-14 00:29:04
【问题描述】:
我想编写一个 bash 脚本,如果用户断开连接,它将继续运行,但如果用户按 Ctrl+C 则可以中止。
我可以这样解决第一部分:
#!/bin/bash
cmd='
#commands here, avoiding single quotes...
'
nohup bash -c "$cmd" &
tail -f nohup.out
但是按 Ctrl+C 显然只会杀死 tail 进程,而不是主体。我可以两者兼得吗?也许使用屏幕?
【问题讨论】:
-
正如您提到的屏幕:您当然可以在屏幕会话中运行您的代码,并
bindCtrl+C 到一些退出您的程序的代码(或者只是终止屏幕会话中的所有内容如果您不需要正常关机,请使用它)。然而,取决于终端模拟器,Ctrl+X 甚至永远不会到达屏幕。 -
那么屏幕会话的启动必须在 bash 脚本本身中。 (基本上,我想要一个运行冗长更新过程的脚本,它的持续时间通常比用户预期的要长。)
-
没问题。只需运行 screen 并让它运行另一个执行代码的 bash 实例。 (例如
screen bash -c $cmd)。使用screen的-c参数指定一个临时文件,里面有bind命令来绑定Ctrl+C。
标签: bash gnu-screen nohup