J'ai cherché un moyen d'envoyer une commande à une session d'écran détachée. Jusqu'ici tout va bien. Voici ce que j'ai trouvé:
$ screen -S test -p 0 -X stuff 'command\n'
Cette commande fonctionne comme il se doit. Mais, j'aimerais aussi la sortie de celle-ci, en écho directement devant mes yeux (pas besoin d'un .log
fichier ou quelque chose, je veux juste la sortie).
L'utilisation de la screen -L
commande n'est pas une option.
linux
ubuntu
gnu-screen
Robin
la source
la source
screen
? N'est-ce pas pour cela que les processus enfants sont faits?Réponses:
Utilisez un tuyau premier entré, premier sorti:
Utilisez un opérateur de redirection. Redirigez la sortie de la commande vers / tmp / test, par exemple comme ceci:
Puis dans une autre coquille
Notez que vous pouvez également rediriger les messages d'erreur à l'aide de l' opérateur 2> & 1 .
Exemple
Comme demandé dans les commentaires, supposons que nous avons un script php acceptant les entrées utilisateur et imprimant la charge du serveur sur l'entrée "status":
Vous créez deux fifos:
Vous appelez un écran:
Dans une autre console, appelons-la console 2, vous découvrirez le nom de votre écran:
Dans la console 2, vous envoyez la commande à l'écran:
vous voyez la commande apparaître à l'écran. Maintenant, dans la console 2, vous pouvez envoyer des commandes à votre processus php:
et en lire:
la source
J'ai un script python qui garde la trace de nombreuses sessions d'écran détachées et capture la sortie de chacune (lorsque les commandes d'utilisation comme free, top -bn2, iostat sont périodiquement envoyées via «stuff»).
Au lieu de rediriger vers un fichier et, par conséquent, de gérer au moins un fichier par session d'écran détachée ... Je redirige simplement vers ce que tty / pts ma session parent utilise.
Étape # 1: Démarrez une nouvelle session d'écran (avec un nom lisible par l'homme) en mode détaché.
Étape # 2: Envoyez vos commandes (j'utiliserai la commande 'free -g' avec 'uname -r') via stuff. Il est important de spécifier la fenêtre que vous souhaitez utiliser (dans notre cas, la première et la seule fenêtre) avec -p.
Étape # 3: l' étape ci-dessus envoie uniquement le texte de la commande. Nous devons également envoyer un retour chariot à cette session d'écran détachée pour que le shell exécute notre commande. Le caractère ASCII 015 est un retour chariot sur la plupart des systèmes * nix.
Étape # 4: Redirigez la sortie de notre session d'écran détachée vers notre tty / pts actuel:
La sortie de l'étape # 4 ressemblera à ceci:
Bien que cela semble un peu impliqué, le processus est facilement scriptable. Avec python, je peux analyser la sortie de l'étape # 4 et capturer uniquement les données qui m'intéressent.
En choisissant un scénario simple comme récupérer les détails IP, j'ai écrit un exemple de script pour illustrer les concepts ci-dessus. N'hésitez pas à remplacer et à bricoler comme bon vous semble.
Exemple de script python pour obtenir les détails IP d'une session d'écran détachée:
Script ci-dessus en action:
la source
screen -X logfile /tmp/something
;screen -X log on
;screen -X stuff "command param"
;screen -X log off
pour fonctionner encore mieux dans ce scénario.Exemple:
la source