Can I create and manipulate unix "screens" in a script?
I have a work environment on my Ubuntu laptop in which I want to use three different screens.
Eg. in terminal, I usually write
screen -S mywork
run_server_1
then, ctrl-a c to create a second screen
run_server_2
etc.
I'd like to write a script to automate setting up this environment, but how can I control multiple screens from one script?
Update : I really want to be able to do this from a shell script, not a screen config. file. Is there a way to do that?
Solution 1:
Reading man pages and tutorials helps
I would say that you want to do is create a file $HOME/.screenrc.multiwin
# read in your normal screenrc
# before anything else
source $HOME/.screenrc
# now start opening windows
# it's possible to set the window title with
# the -t option
# you can also specify the window number
# to launch in
screen -t server1 5 run_server_1
screen -t server2 6 run_server_2
Then running
screen -c $HOME/.screenrc.multiwin
will do what you need
Solution 2:
Commands can be passed from outside using screen -S sessionname -X command
for instance screen -S mywork -X screen run_server_2
would create a new window (same as ctrl-a c
) but that window would have run_server_2 executing in it. Unlike doing it by hand,there will not be a shell running in that window, so when run_server_2 exits, the window will be closed.
Controlling multiple screens is simply a matter of making sure they're all named with -S
Solution 3:
I believe tmux is much more easily scriptable than screen for this type of purpose. tmux program accepts its own commands as arguments on the command line, so for example, to launch two windows: "tmux new-session -d '/bin/bash' \; new-window -d 'top'". In the first window, it will run an interactive "bash" shell, and in the second window it will run "top".