4

I'm trying to write a script to:

  1. Start a new screen session
  2. Run some program or script within that new screen session
  3. 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.

earthmeLon
  • 11,247
  • Have you checked these answers ? >> https://askubuntu.com/questions/62562/run-a-program-with-gnu-screen-and-immediately-detach-after – Rooney Dec 04 '17 at 13:09
  • @Rooney Yes, and this comes pretty close: screen -S test -d -m myprogram except the screen session terminates after myprogram is finished. I'll add this in my post for completeness. – RocketNuts Dec 04 '17 at 16:23

1 Answers1

12

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.

Rooney
  • 965