web-dev-qa-db-fra.com

BASH Script: Créez une session d'écran et exécutez une commande dedans

Je souhaite écrire un fichier Bash, qui commence une session d'écran et exécute une commande à l'intérieur.

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

Ceci est mon code jusqu'à présent:

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

Vous avez besoin que vous passionnez la commande à exécuter à l'intérieur de la session d'écran. Vous pouvez le faire en passant directement la commande ou en appelant un script qui exécute la commande que vous vouliez.

screen -S test "python3 test.py"

Si vous utilisez cette méthode, notez que la commande (python) et l'argument qui lui est transmis (test.py) Les deux sont à l'intérieur des marques de discours ".." - Cela peut être compliqué si vous passez des arguments qui nécessitent des marques de parole 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 est in/home/utilisateur /, est exécutable (chmod +x ./test.py) et contient:

#!/bin/sh
python3 test.py

L'avantage de la deuxième méthode est que vous pouvez avoir autant de commandes que vous le souhaitez dans le script, ils vont courir l'un après l'autre.

Vous pouvez avoir plusieurs commandes exécuter 'en même temps "à l'aide de l'ampleur de la tâche:

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

Certaines astuces extra-astucieuses peuvent être trouvées à une question similaire sur sf et une dernière chose à noter est qu'avec toutes ces méthodes, la session d'écran elle-même fermera une fois que votre programme/script est sorti. Si vous ne voulez pas que cela fasse cela, vous souhaitez examiner une session Bash, qui appelle le script, puis revient à la session Bash après - comme ceci screen -S test "someCommand; bash".

2
djsmiley2kStaysInside

Cela pourrait être réalisable avec -x argument. Tout d'abord, vous créez une session, puis 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 que coller du texte sur le terminal. La commande écho émule de frapper le retour. Bon blog-poste sur l'envoi de commandes: https://theterminalalife.com/sending-commands-into-a-screen-session/

0
Elias Jarlebring