web-dev-qa-db-fra.com

Exécuter un programme avec l’écran GNU et le détacher immédiatement après

J'essaie de comprendre comment écrire un script qui lancera un ou plusieurs programmes dans GNU sessions d'écran au démarrage du système. J'essaye ceci:

#!/bin/bash
screen -S test -d -m -X $HOME/folder/folder/.program \
screen -S test2 -d -m -X $HOME/folder/folder/.program2 \

mais la commande ne peut pas être exécutée car la session est déjà détachée? La seule chose dont j'ai besoin est d'exécuter la commande dans la session d'écran et de détacher cette session immédiatement.

Merci pour les réponses, mais maintenant je suis confronté à un autre problème. Le script cesse de fonctionner après avoir mis des variables pour mon "programme et programme2". Quelque chose comme ça:

#!/bin/bash
screen -S test -d -m $HOME/folder/folder/.program -f config.cfg

pour une raison quelconque, "-f config.cfg" a été ignoré. Je suis également essayé de citer la commande et ne aide pas aussi.

26
TbMa

Vouliez-vous vraiment mettre le \ à la fin de la ligne? Sinon, essayez de les supprimer - ils échappent au personnage suivant.

en outre, le fait de supprimer le -X facilite le travail de configuration pour moi, par exemple:

screen -S test -d -m -X touch /tmp/test

échoue avec No screen session found, cependant:

screen -S test -d -m touch /tmp/test

fonctionne bien. En tant que tel, je suspecte que ce qui suit fonctionnera pour vous:

#!/bin/bash
screen -S test -d -m $HOME/folder/folder/.program
screen -S test2 -d -m $HOME/folder/folder/.program2

Rappelez-vous que si vous exécutez cela au démarrage, $ HOME n’est pas le même qu’après vous être connecté en tant qu’utilisateur spécifique. Si vous devez l'exécuter en tant qu'utilisateur particulier, vous devez utiliser le type su pour l'exécuter en tant qu'utilisateur, et spécifier le chemin d'accès complet supprimera toute ambiguïté:

#!/bin/bash
screen -S test -d -m su - username /home/username/folder/folder/.program
screen -S test2 -d -m su - username /home/username/folder/folder/.program2

Vous pouvez également appeler le script entier ci-dessus sous la forme su - username /path/to/your/script.

33
Cry Havok

Comme Cry Havok l'a mentionné, vous pouvez placer le programme directement sur la ligne de commande.

Si vous devez vraiment utiliser l'option -X, alors a) vous devez spécifier la commande 'screen' et b) la session doit exister au préalable.

screen -dmS test
screen -S test -X screen $HOME/folder/folder/.program
screen -dmS test2
screen -S test2 -X screen $HOME/folder/folder/.program2
4
Arcege