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?



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.


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.


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.
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.