GNU/Linux >> Tutoriels Linux >  >> Linux

envoyer la saisie de texte à un écran détaché

Je peux résoudre au moins une partie du problème :pourquoi le stop une partie ne fonctionne pas. Expérimentalement, lorsque vous démarrez une session Screen en mode détaché (screen -d -m ), aucune fenêtre n'est sélectionnée, donc entrée envoyée plus tard avec screen -X stuff est juste perdu. Vous devez spécifier explicitement que vous souhaitez envoyer les frappes à la fenêtre 0 (-p 0 ). C'est une bonne idée de toute façon, au cas où vous créeriez d'autres fenêtres dans cette session Screen pour une raison quelconque.

screen -S minecraft -p 0 -X stuff "stop^M"

(Traduction de l'écran ^M à control-M qui est le caractère envoyé par la Entrée clé.)

Le problème de démarrage de la session à partir d'un script est probablement lié à unMENU.


Tout d'abord, une note sur la facilité de saisie des retours à la ligne :

Juste un avertissement que le $() construct supprime les nouvelles lignes de la sortie de la commande afin que les lignes de sortie puissent être utilisées comme arguments pour d'autres programmes. Cela peut entraîner un comportement inattendu. Dans ce cas, je suppose que vous essayez spécifiquement d'envoyer l'équivalent de Enter frappe. Alors que le retour chariot que vous envoyez avec \r ne sera pas rayé, il existe plusieurs façons plus simples d'entrer ce caractère sans avoir besoin de la commande supplémentaire.

  1. Vous pouvez placer une nouvelle ligne régulière à l'intérieur de vos guillemets doubles

    screen -S minecraft -X stuff "stop
    "
    
  2. Ou vous pouvez entrer le caractère dans une ligne de terminal en utilisant la touche Ctrl +v Entrez séquence. Cela ressemblera à quelque chose comme ^M dans le terminal, mais c'est un caractère de saut de ligne spécial.

    screen -S minecraft -X stuff "stop^M"
    

Deuxièmement, une note sur le comportement erratique de l'écran. (Explication et solution par Gilles)

L'écran a un problème avec l'acceptation des entrées dans une session d'écran qui n'a jamais été jointe. Si vous exécutez ceci, cela aura échoué :

screen -d -m -S minecraft zsh
screen -S minecraft -X stuff "stop^M"
screen -r minecraft

Mais si vous lancez ceci, cela fonctionnera :

screen -d -m -S minecraft zsh
screen -r minecraft (then disconnect with Ctrl-a-d)
screen -S minecraft -X stuff "stop^M"
screen -r minecraft

Enfin, vous pouvez utiliser le bien meilleur comportement tmux au lieu de screen .

GNU-Screen a été de facto multiplexeur terminal depuis de nombreuses années, mais il a depuis longtemps cessé d'être développé et les bogues et les bizarreries ne sont pas corrigés. Tmux est en cours de développement actif, comprend de nombreuses fonctionnalités que l'écran ne peut pas toucher, et son comportement prêt à l'emploi est plutôt plus intuitif. De plus, c'est mieux documenté. Voici comment convertir votre code :

# Start new detached tmux session with a named window pane running the java app
tmux new-session -d -n minecraft /usr/lib/java/bin/java [args]

# Send it keys to stop the mincraft server
tmux send-keys -t minecraft "stop^M"

Je m'excuse d'avoir déterré cet ancien message, mais cela m'aurait aidé dans mes efforts si ces informations avaient été disponibles au moment où j'avais un problème similaire. Il existe de nombreuses questions sur la façon d'envoyer des commandes d'écran dans un script bash. Comme pour le dépeçage de chat, cela peut être fait, mais j'aime cette façon. Avec cela, vous pouvez envoyer n'importe quelle commande ou dire n'importe quoi simplement en appelant la fonction say_this.

#!/bin/bash

say_this()
{
    screen -S minecraft -p 0 -X stuff "$1^M"
}

say_this "say Saving world"
say_this "save-off"
say_this "save-all"
...

C'est avec ssh !

#!/bin/bash

say_this()
{
    # Dont forget to set NAME or whatever
    ssh -p 8989 192.168.1.101 screen -S $NAME -p 0 -X stuff \"$1^M\"
}

say_this "say test"
say_this "say [email protected]#$%^&*()<>?This string will work!"

Linux
  1. Comment fonctionnent la saisie au clavier et la sortie de texte ?

  2. Envoyer une entrée à une session d'écran depuis l'extérieur ?

  3. Centrage du texte à l'écran avec SFML

  4. Renommer la session d'écran

  5. Désactiver la suppression d'écran sur la console de texte

Comment utiliser l'éditeur Vim pour saisir du texte n'importe où sous Linux

Rechercher du texte sur la sortie du terminal ?

Pourquoi Gnu Screen / Byobu laisse-t-il du texte inutile dans le shell lors d'une recherche inversée ?

Garbage Black Text sur écran blanc sur un serveur ?

Comment configurer un serveur Minecraft sur CentOS 7

Sélectionnez du texte à l'aide du clavier dans le shell Linux