7 votes

Bash script : Créer une session écran et exécuter une commande dans celle-ci.

Je veux écrire un fichier bash, qui démarre une session écran et exécute une commande à l'intérieur.

Le problème est qu'il crée d'abord une session et que lorsque vous quittez manuellement la session, il exécute la commande suivante. Existe-t-il un moyen d'exécuter la commande à l'intérieur de la session ?

C'est mon code jusqu'à présent :

#!/bin/bash
screen -S test
python3 test.py

5voto

user38001 Points 59

Vous devez passer la commande à exécuter dans la session d'écran. Vous pouvez le faire en passant la commande directement, ou en appelant un script qui exécute la commande que vous voulez.

screen -S test "python3 test.py"

Si vous utilisez cette méthode, notez que la commande ( python ) et l'argument qui lui est passé ( test.py ) sont tous les deux à l'intérieur des marques d'expression " .. " - cela peut devenir compliqué si vous passez des arguments qui nécessitent des marques d'expression spécifiquement formatées, et il est peut-être plus facile d'utiliser la méthode ci-dessous.

screen -S test /home/user/test.sh

où test.sh se trouve dans /home/user/, est exécutable ( chmod +x ./test.py ) et contient :

#!/bin/sh
python3 test.py

L'avantage de la deuxième façon est que vous pouvez avoir autant de commandes que vous voulez dans le script, elles s'exécuteront les unes après les autres.

Vous pouvez faire en sorte que plusieurs commandes soient exécutées "en même temps" en utilisant l'arrière-plan de la tâche :

#!/bin/sh
# All 3 will run at the same time
python3 test.py &
python3 test1.py &
python3 test2.py &

Des astuces supplémentaires peuvent être trouvées à un question similaire sur SF Une dernière chose à noter est qu'avec TOUTES ces méthodes, la session d'écran elle-même se ferme lorsque votre programme/script se termine. Si vous ne voulez pas qu'il fasse cela, vous pouvez envisager d'exécuter une session bash, qui appelle le script et retourne ensuite à la session bash - comme ceci screen -S test "someCommand; bash" .

1voto

Cela pourrait être réalisable avec l'argument -X. D'abord vous créez une session et ensuite vous envoyez la commande pour exécuter le script :

$ echo "echo Hello world > /tmp/foo" > /tmp/myscript.sh; chmod a+x /tmp/myscript.sh
$ screen -S mysession -d -m bash
$ screen -r mysession -X stuff "/tmp/myscript.sh"$(echo -ne '\015')
$ cat /tmp/foo 
Hello world

La commande "stuff" simule le collage de texte dans le terminal. La commande "echo" émule la touche "retour". Bon article de blog sur l'envoi de commandes : https://theterminallife.com/sending-commands-into-a-screen-session/

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X