Envoi d'une entrée à une session écran de l'extérieur

18

Mon scénario est le suivant:

J'ai une session d'écran en cours d'exécution dans un emplacement distant. À l'intérieur de cet écran se trouve un programme consolé. Lorsqu'il est exécuté sans écran, ce programme démarre dans le terminal et accepte les commandes sur son entrée standard.

Ce que je veux, c'est un moyen d'envoyer à distance une commande à l'écran afin que cette commande soit reçue par le programme de la console. Peut-être comme ça:

Mon PC -> SSH Send Msg Auto -> Session d'écran -> Programme (commande Run reçue)

Donc, à partir d'un PC distant, je peux envoyer via des commandes SSH à l'écran qui les envoie au programme. Le programme les accepte et les exécute.

Luis Alvarado
la source

Réponses:

17

Si je comprends bien, vous souhaitez envoyer une entrée à un programme exécuté dans une session d'écran. Vous pouvez le faire avec la stuffcommande de l'écran . Utilisez l' -Xoption d' écran pour exécuter une commande dans une session d'écran sans y attacher.

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

Si vous voulez voir la sortie du programme, voir les hardcopy, loget les logfilecommandes.

Gilles 'SO- arrête d'être méchant'
la source
Vous avez déjà essayé la commande stuff, mais elle n'envoie que des commandes provenant de l'écran. Vous voyez qu'il accepte uniquement les commandes liées à l'écran, pas le programme que j'utilise lié.
Luis Alvarado
@CYREX: stuffenvoie des caractères, exactement comme si vous les aviez tapés. Qu'avez-vous essayé exactement, quel a été l'effet recherché et que s'est-il passé à la place?
Gilles 'SO- arrête d'être méchant'
Je vois que vous avez la partie -p. Je n'avais pas ça. Ajouté cette partie et il envoie la commande maintenant, mais comment puis-je appuyer sur ENTRÉE pour chaque commande?
Luis Alvarado
Je l'ai trouvé. Ajoutez $ avant les guillemets et faites en sorte que C s'échappe. Comme ça -X stuff $ 'show users \ n'
Luis Alvarado
@CYREX: -pest nécessaire (ou au moins une bonne idée) s'il y a plus d'une fenêtre. Pour «appuyer sur Entrée», il suffit d'inclure une nouvelle ligne dans l'argument (c'est-à-dire à l'intérieur des guillemets), comme je l'ai fait.
Gilles 'SO- arrête d'être méchant'