Skip to main content

Raymii.org Logo (IEC resistor symbol) logo

Quis custodiet ipsos custodes?
Home | About | All pages | RSS Feed | Gopher

Send commands or input to a detached screen session

Published: 02-10-2019 | Author: Remy van Elst | Text only version of this article


Table of Contents


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.

If you like this article, consider sponsoring me by trying out a Digital Ocean VPS. With this link you'll get $100 credit for 60 days). (referral link)

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 .screenrc file or inside a screen session via CTRL+A :. For example, the command

logfile filename.txt

tells screen to log the output to a text file named filename.txt.

Shell commands are things you type in your terminal. Both commands like ls or keyboard shortcuts like CTRL+C.

You can start a detached screen session with the following command:

screen -dmS sessionName [command-to-run]

With the command

screen -ls

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

The -p 0 flag is for the window inside screen. If you have created multiple windows (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 command:

screen -S sessionName -p 0 -X logfile filename.txt

For shell commands or keyboard input, we need to use the screen command stuff.

If you have a running screen session and you want to send the ls command:

screen -S sessionName -p 0 -X stuff "ls^M"

After the stuff you do need quotes. The ^M is the keycode the ENTER key 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 press CTRL+V and then the special key. The PGDOWN key for example:

^[[6~

More documentation on the stuff command can be found here.

Tags: bash , screen , shell , snippets , stuff