How can I start multiple screen sessions automatically?

I'm trying to build a command that launches screen, creates four sessions with different names, and run four different commands.

I know how to do this manually:

1. screen
2. ./command1 args
3. CTRL-A :sessionname Session 1
4. CTRL-A C
5. (GOTO 2)

Can I do this with a bash script or something? How would I do so?

4 Answers

screen -dmS "$SESSION_NAME" "$COMMAND" "$ARGUMENTS" will spawn a screen running $COMMAND in the background.

You can see active sessions with screen -ls and reattach with screen -r "$SESSION_NAME".

Dead sessions can be killed with screen -wipe.

3

To start multiple sessions automatically, set up a .screenrc file, a config file for screen. In it, you can create sessions, start programs, change the working dir etc. I use it to initialise my screen session.

Simple exampe for a .screenrc file:

# don't display the copyright page
startup_message off
# increase scrollback buffer size
defscrollback 10000
# create windows
screen -t TODO vim TODO.txt
chdir src
screen -t coding vim main.c
screen -t run 

The screen commands above each create one screen session. -t sets the session's title; the rest of the line is the command to run and its parameters.

Thus, the first and second screen line start a session and launch vim inside. The third one just starts a session and drops you at a prompt. chdir changes the working directory for all subsequent sessions.

If you want to have multiple .screenrc files, just name them any way you want, and select one with screen -c myscreenrc.

You can use the d, m, S options together:

screen -Sdm s1
screen -Sdm s2
screen -Sdm s3

S : To create a screen

d : detach from a screen

m : To enforce creation of screen, regardless whether screen is called from within another screen or not.

1

I have many cases where I need to open up a set of hosts for investigation or support. Because I only need these additional windows occasionally I decided to use a shell script rather than .screenrc approach.

for example in ~/bin/prod_support:

#!/bin/bash
if [[ ! -z "$STY" ]]; then screen -t "hosta" ssh hosta screen -t "hostb" ssh hostb
else echo "start up screen first"
fi

If run from a non-screen shell I get a reminder... if run from inside screen, it will add titled windows for each script run.

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like