我正在尝试编写一个脚本来:
- 开始新
screen
会话 - 在新的屏幕会话中运行一些程序或脚本
- 断开与屏幕会话的连接,而步骤 2 中的程序可能仍在其中运行。如果步骤 2 中的程序立即或稍后完成,则屏幕会话应保持运行(断开连接)。
我一直在尝试各种组合,使用screen -X program
或screen -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'
这对我也有用。