Raymii.org
Quis custodiet ipsos custodes?Home | About | All pages | Cluster Status | RSS Feed
Send commands or input to a detached screen session
Published: 02-10-2019 | Author: Remy van Elst | Text only version of this article
❗ This post is over five years old. It may no longer be up to date. Opinions may have changed.
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.
Recently I removed all Google Ads from this site due to their invasive tracking, as well as Google Analytics. Please, if you found this content useful, consider a small donation using any of the options below:
I'm developing an open source monitoring app called Leaf Node Monitoring, for windows, linux & android. Go check it out!
Consider sponsoring me on Github. It means the world to me if you show your appreciation and you'll help pay the server costs.
You can also sponsor me by getting a Digital Ocean VPS. With this referral link you'll get $200 credit for 60 days. Spend $25 after your credit expires and I'll get $25!
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.