我想在周末运行一个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,而是"" 。