陷阱“”HUP vs Nohup? 我如何在nohub模式下运行一部分shell脚本?

我想在周末运行一个shell脚本,但是我想确保terminal是否失去连接,我的脚本不会被终止。 我使用nohup整个脚本invokation,但我也想执行我的shell脚本的一部分,如果有人closures我的terminal,我的脚本仍然在后台运行。 这是一个简单的例子:

#!/bin/bash echo "Start the trap" trap " " HUP echo "Sleeping for 60 Seconds" sleep 60 echo "I just woke up!" 

请build议我应该做什么? 当我closures我的terminal选项卡时,“HUP”陷阱似乎不起作用。

你有没有考虑使用screen而不是nohup方法?

打开一个屏幕会话,并照常执行脚本。 使用Ctrl-a Ctrl-d从会话中分离出来。

当您返回时,您可以使用screen -r或可能screen -ls重新连接到会话,并select正确的会话进行恢复。

另请参阅: 如何重新连接到断开的ssh会话

很确定你想trap "" HUP 。 不要trap " " HUP

陷阱[-lp] [[arg] signal_spec …]

ARG是shell收到SIGNAL_SPEC信号时读取和执行的命令。 如果ARG不存在(并且提供单个SIGNAL_SPEC)或“ – ”,则每个指定的信号被重置为其原始值。 如果ARG是空string,则每个SIGNAL_SPEC被shell和它所调用的命令忽略。

" "不是空string,而是""