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

Roc*_*uts 3 session bash scripts gnu-screen background-process

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

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

我一直在尝试各种组合用的screen -X programscreen -S somename后面program接着screen -D,相结合-d或者-m我相关的问题和答案,但没有找到工作的选项。

我能得到的最接近的是这个:

screen -S MySessionName -d -m myprogram
Run Code Online (Sandbox Code Playgroud)

这会在后台启动一个新的屏幕会话,运行myprogram. 除了一旦myprogram完成(有时是立即)屏幕会话终止,而我想保持它运行。

Roo*_*ney 9

方法一

我在我的机器上创建了您在此处描述的演示设置。我也遇到了你报告的问题。但是添加一小行script解决了我的问题。

我在末尾添加了以下行 myprogram

exec $SHELL
Run Code Online (Sandbox Code Playgroud)

脚本完成后,Bash 进程将用新的自身调用替换自身。

方法二

或者您可以尝试以下方法,在该方法中我们首先启动detached screen并使用以下命令将命令发送到该屏幕stuff

为此,您首先需要启动一个分离的屏幕。

screen -dmS MySessionName
Run Code Online (Sandbox Code Playgroud)

然后将脚本发送到该屏幕。

screen -S MySessionName -p 0 -X stuff 'myprogram\n'
Run Code Online (Sandbox Code Playgroud)

这也对我有用。