18

My scenario is this:

I have a screen session running in a remote location. Inside this screen is a consoled-based program. When run without screen, this program starts in the terminal and accepts commands on its standard input.

What I want is a way to remotely send a command to screen so that this command is received by the console program. Maybe like this:

My PC -> SSH Send Msg Auto -> Screen Session -> Program (Run command received)

So from a remote PC I can send via SSH commands to the screen which sends them to the program. The program accepts them and executes them.

BenMorel
  • 4,587
Luis Alvarado
  • 830
  • 1
  • 9
  • 20

2 Answers2

17

If I understand correctly, you want to send input to a program running inside a screen session. You can do this with screen's stuff command. Use screen's -X option to execute a command in a screen session without attaching to it.

screen -S sessionname -p windowname -X stuff 'command1
command2
'

If you want to see the program's output, see the hardcopy, log and logfile commands.

1

To send a command to a detached screen:

screen -S <screen_name> -X stuff "command blah blah blah\n"
  • Be sure to have "\n" at the end of the command. If you don't append the "\n", then the command will be sent but won't initiate.

Side Note : If you want to leave a screen that you are inside of without ending it, use the following key-bind shortcut to detach from it: ctrl + a + d (C-a-d)

  • Hello, thanks for a contribution - looks good. Is that SCREEN following the -S a screen name (<screen name>)? Also what is the "stuff" parameter? – Danny Staple Jul 21 '21 at 10:21
  • 1
    @DannyStaple

    stuff string

    Stuff the string string in the input buffer of the current window. This is like the "paste" command but with much less overhead. You cannot paste large buffers with the "stuff" command. It is most useful for key bindings. See also "bindkey".

    – Evan Schwartzentruber Sep 22 '21 at 17:36