Send commands or input to a detached screen session
Published: 02-10-2019 | Author: Remy van Elst | Text only version of this article
This snippet will show you how to send commands to a running screen session. This includes actual shell commands or keyboard input, as well as screen commands, for example to set a logfile.
As I'm writing this article, I notice that today screen 4.7.0 is released.
screen commands vs shell commands (input)
For my recent article on serial port data I figured out how to send a command to a running but detached screen session. This was a screen command, not a shell command.
screen commands are the same things as what you would put in a
file or inside a screen session via
CTRL+A :. For example, the command
tells screen to log the output to a text file named
Shell commands are things you type in your terminal. Both commands like
or keyboard shortcuts like
You can start a detached screen session with the following command:
screen -dmS sessionName [command-to-run]
With the command
you can view all screen sessions and with either
screen -r or
screen -x you
can reattach to a session.
Sending commands to screen
As explained above, there is a difference between shell commands and screen commands.
screen has the
-X flag which allows you to send a (screen) command to a session.
To send a screen command to a session:
screen -S sessionName -p 0 -X screen command
-p 0 flag is for the window inside screen. If you have created multiple
CTRL+A c) you can specify the number. With
CTRL+A [0-9] you can
directly go to that window inside screen.
For screen commands, after the
-X flag you don't need quotes. So for the logfile
screen -S sessionName -p 0 -X logfile filename.txt
For shell commands or keyboard input, we need to use the screen command
If you have a running screen session and you want to send the
screen -S sessionName -p 0 -X stuff "ls^M"
stuff you do need quotes. The
^M is the keycode the
sends to the terminal. If you omit it, screen will just type
ls onto your terminal
but not send the
ENTER key afterwards.
To send a
CTRL+C to a session (e.g. to stop a running interactive process):
screen -S sessionName -p 0 -X stuff "^C"
If you need to find out what keycode a specific key sends, in bash you can
CTRL+V and then the special key. The
PGDOWN key for example:
More documentation on the
stuff command can be found here.