启动一个屏幕会话并运行脚本而不附加到它?
我正在尝试编写一个脚本:
- 开始新的
screen
会话 - 在新的屏幕会话中运行一些程序或脚本
- 从屏幕会话中分离,而步骤2中的程序可能仍然在那里运行。 如果步骤2中的程序立即或稍后结束,则屏幕会话应保持运行(分离)。
我一直在尝试各种组合与screen -X program
或screen -S somename
后跟program
然后是screen -D
,结合-d
或-m
选项,我在相关的问题和答案中找到但没有任何作用。
我能得到的最接近的是:
screen -S MySessionName -d -m myprogram
这将在背景中启动一个新的屏幕会话,运行myprogram
。 除了myprogram
完成(有时立即)之外,屏幕会话终止,而我想让它继续运行。
方法1
我在我的机器上创建了一个你在这里描述的演示设置。 我也遇到了你报道的问题。 但添加一小段script
解决了我的问题。
我在myprogram
的末尾添加了以下行
exec $SHELL
脚本完成后,Bash进程将使用新的自身调用替换自身。
方法2
或者您可以尝试以下方法,首先我们启动一个detached screen
然后使用stuff
将命令发送到该屏幕
首先,您需要启动一个分离的屏幕。
screen -dmS MySessionName
然后将脚本发送到该屏幕。
screen -S MySessionName -p 0 -X stuff 'myprogram\n'
这对我也有用。