启动一个屏幕会话并运行脚本而不附加到它?

我正在尝试编写一个脚本:

  1. 开始新的screen会话
  2. 在新的屏幕会话中运行一些程序或脚本
  3. 从屏幕会话中分离,而步骤2中的程序可能仍然在那里运行。 如果步骤2中的程序立即或稍后结束,则屏幕会话应保持运行(分离)。

我一直在尝试各种组合与screen -X programscreen -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' 

这对我也有用。