Écran GNU: impossible de bourrer les commandes à moins que l'écran ne soit attaché?

10

J'ai le script suivant

screen -d -m -S $1                #start screen minimized
screen -S $1 -X stuff "$beast     
"                                 #stuff commands

à moins que j'attache l'écran en premier, il semble que les effets des choses ne feront rien? Pourquoi est-ce et comment puis-je modifier ce script pour ne pas avoir besoin de joindre l'écran?

dukevin
la source

Réponses:

14

Lorsque vous démarrez une session Screen en mode détaché ( screen -d -m), aucune fenêtre n'est sélectionnée, donc l'entrée envoyée ultérieurement avec screen -X stuffest juste perdue. Vous devez spécifier explicitement que vous souhaitez envoyer les séquences de touches à 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 d'écran pour une raison quelconque.

screen -S "$1" -p 0 -X stuff "$beast$(printf \\r)"

( printf \\rpour émuler strictement la Returnclé; de nombreux programmes, mais pas tous, acceptent une nouvelle ligne ( \n).)

Gilles 'SO- arrête d'être méchant'
la source
Merci! cela fonctionne parfaitement. Désolé tout le monde pour être hors sujet
dukevin
ne fonctionne pas pour moi.
Tanner Strunk
2

Cela est survenu récemment en essayant de répondre à une question sur unix.stackexchange.com .

Le résumé est que l'écran n'a pas de fenêtre sélectionnée par défaut à moins que vous ne l'attachiez, mais Gilles nous a montré comment vous pouvez forcer une à être sélectionnée en ajoutant l'argument -p 0à votre commande d'écran.

Personnellement, je recommande de passer à tmux. Voici comment porter vos commandes d'écran pour qu'elles fonctionnent dans tmux:

tmux new-session -d -n $1
tmux send-keys -t $1 "$beast\n"
Caleb
la source