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

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

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

  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

方法 1

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

我在末尾添加了以下行myprogram

exec $SHELL

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

方法 2

或者你可以尝试以下方法,我们detached screen首先启动一个并使用以下命令向该屏幕发送命令stuff

为此,首先需要启动一个独立的屏幕。

screen -dmS MySessionName

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

screen -S MySessionName -p 0 -X stuff 'myprogram\n'

这对我也有用。

相关内容