Start a screen session and run a script without attaching to it?
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.
Related videos on Youtube
RocketNuts
Updated on September 18, 2022Comments
-
RocketNuts over 1 year
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
orscreen -S somename
followed byprogram
followed byscreen -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 asmyprogram
finishes (sometimes instantly) the screen session terminates, whereas I want to keep it running. - Start a new
-
RocketNuts over 6 yearsBrilliant, that 2nd method is perfect!
-
pa4080 over 6 yearsHi, Rooney, I'm not sure but probably you could change
sleep infinity
from Method 1 toexec bash
orexec $SHELL
- analogically to the solutions provided here: With a launcher for a terminal application, how can I keep the terminal open after the program is complete? -
Rooney over 6 yearsHi, @pa4080 You are right. thanks for the reply. Now the screen stays detached and i can continue to the screen, while using
sleep infinity
the only available option is terminate the screen manually. -
Scott Hather almost 4 yearsThe second method is perfect for when my script crashes and doesn't get around to invokating itself. Many thanks!