参考这里关于在后台屏幕会话中运行脚本并自行关闭。
screen -dmS myscreen bash -c 'command1; command2;'
我们如何向主终端发出屏幕 myscreen 已完成执行的信号,以便我可以通知用户?否则它会默默地完成并关闭。
答案1
当您调用 时screen -dm
,它会启动一个独立的会话,独立于您当前的 shell。由于新会话不是当前 shell 的子会话,因此您需要使用某种繁忙检查循环自行调查其状态。
一种选择是调查输出screen -ls myscreen
并将其与“No Sockets found in...”进行比较(与当前运行的输出“There is a screen on ... (Detached) ... 1 Socket in...”形成对比...”)。这假设您只会运行一个“myscreen”会话:
while ! screen -ls myscreen | grep -q 'No Sockets found in'; do sleep 1; done
该screen -ls
命令只是解析出套接字目录中的内容;你可以自己去那里看看。套接字文件一般放在$SCREENDIR
;在我测试的系统上,SCREENDIR=/var/run/screen
.只要至少有一个文件与通配符匹配,下面的循环就会成功,当不再存在这样的文件时,循环就会退出:
while ls /var/run/screen/S-"$LOGNAME"/*.myscreen > /dev/null 2>&1; do sleep 1; done
这仍然依赖于这样的假设:您只启动了一个名为“myscreen”的屏幕会话。
如果您可能启动多个同名会话,则必须更加小心地挑选与每个会话对应的 PID。