Start a screen session and run a script without attaching to it?
I'm trying to write a script to:
- Start a new
screen
session - Run some program or script within that new screen session
- Detach from the screen session, while the program from step 2 may still be running in there. If the program from step 2 finishes, immediately or later, the screen session should remain running (detached).
I have been trying all sorts of combinations with screen -X program
or screen -S somename
followed by program
followed by screen -D
, combining with -d
or -m
options which I find in related questions and answers but nothing works.
The closest I could get was this:
screen -S MySessionName -d -m myprogram
This launches a new screen session in the backgroun, running myprogram
.
Except as soon as myprogram
finishes (sometimes instantly) the screen session terminates, whereas I want to keep it running.
Solution 1:
Method 1
I created a demo setup you described here in my machine. I also faced the issue you reported. But adding a small line of script
solved my issue.
I added the following line at the end of myprogram
exec $SHELL
After your script is finished, the Bash process will replace itself with a new invocation of itself.
Method 2
Or you can try the following method in which we start a detached screen
first and send command to that screen using stuff
For this first you need to start a detached screen.
screen -dmS MySessionName
And then send the script to that screen.
screen -S MySessionName -p 0 -X stuff 'myprogram\n'
This also worked for me.