Comment obtenir la sortie de `screen` dans un script?

33

J'ai une screeninstance en cours d'exécution, et j'aurais besoin d'exécuter du code à l'intérieur de screen, et d'obtenir le résultat sur mon script.

La première partie est assez simple, je viens screen -S session_name -X eval 'stuff "$cmd"\015'.
(J'ai modifié une ligne que j'ai trouvée dans un script )

La deuxième partie, extraire la sortie, est plus délicate. Comment puis-je obtenir la sortie entière, quelle que soit sa taille?

1ace
la source
1
Connexes: explication descreen -X stuff … ; une question similaire à la vôtre .
Gilles 'SO- arrête d'être méchant'
Merci :) Le deuxième lien a expliqué pourquoi la première commande doit être stuff, ce que j'ai eu du mal à comprendre.
1ace

Réponses:

29

Vous pouvez commencer screenavec l' -Loption. Cela entraînera la création d'un fichier par l'écran screenlog.n(la partie n est numérique, commençant par un zéro) dans le répertoire de travail actuel.

Dans votre cas, cela ressemblerait à quelque chose comme: screen -S session_name -L -X eval 'stuff "$cmd"\015'

Tant que vous vous souvenez de nettoyer après, cela devrait correspondre à ce que vous recherchez.

Pour la dernière ligne du journal, il peut facilement être obtenu avec tail -1 screenlog.0, ou le journal entier peut être analysé comme vous le souhaitez.

New Jersey
la source
Une chose cependant: la screencommande que j'ai donnée était juste d'envoyer la commande. Pour démarrer le screen, j'ai utilisé screen -dmS name program;-)
1ace
22

Une autre nuance qui peut être utile à l'avenir: si vous êtes dans une session écran, vous pouvez demander de manière interactive la création du fichier journal. Appuyez sur ctrl- a H(Contrôle-A suivi de H majuscule) pour demander à l'écran de commencer à vider la fenêtre dans laquelle vous vous trouvez dans un fichier journal.

rickumali
la source
5
Je ne sais pas si c'est à cause d'une version plus récente mais mon man screendit, je dois taper CA H, sans le contrôle pour H. Sad seulement, que cela ne capture pas le journal précédent.
Matmarbon
2
Tu as raison! C'est CA H pour générer un fichier journal. Veuillez noter qu'il s'agit d'un H majuscule (un h minuscule ne produit qu'une copie papier de l'écran actuel).
rickumali
3
Veuillez mettre à jour la réponse à CA H. Les futurs chercheurs peuvent être trompeurs et manquer la bonne réponse.
gc5
Quelqu'un connaît-il un moyen d'envoyer la commande via un script? Comme dans le contrôle d'envoi + a puis le H après une fraction de seconde.
Zach W.