web-dev-qa-db-fra.com

Exécuter deux commandes séquentiellement en utilisant crontab

Ma fille de 3 ans aime SuperTux . Elle ne peut pas contrôler la souris, le jeu devrait donc s'exécuter automatiquement au démarrage. Après le jeu, l'ordinateur devrait s'éteindre automatiquement.

Cependant, lorsque je mets la commande ci-dessous dans " crontab -e ":

@reboot env DISPLAY=:0.0 /usr/games/supertux2 && echo "PASSWORD" | Sudo -S shutdown -h now

La première partie exécute le jeu sur un ancien PC au moment du démarrage. Je m'attendais à ce que la deuxième partie de la commande éteigne l'ordinateur lorsque ma fille quitte le jeu, mais cela ne fonctionne pas.

La chaîne-commande A && B ne signifie-t-elle pas que lorsque A est terminé, démarrez B?

Comment puis-je automatiser la mise hors tension de l'ordinateur lorsque le jeu est fermé?

4
mini

Techniquement, A && B n'exécutera B que lorsque A réussit (quitte avec le statut EXIT_SUCCESS, c'est-à-dire 0). De même, A || B n'exécutera B que lorsque A échoue. Une autre option pourrait être A; B qui devrait exécuter B quel que soit l'état de sortie de A mais pas jusqu'à ce que A soit terminé. Je ne sais pas comment les jeux se terminent actuellement, mais s'il ne le fait pas avec un statut EXIT_SUCCESS, B ne sera pas exécuté.

Pour tester cela, vous pouvez exécuter les commandes suivantes et voir celles qui génèrent la chaîne:

Perl -e 'exit 0' && echo "exit was successful"
Perl -e 'exit 0' || echo "exit was successful"
Perl -e 'exit 0'; echo "exit was successful"
Perl -e 'exit 1' && echo "exit was failure"
Perl -e 'exit 1' || echo "exit was failure"
Perl -e 'exit 1'; echo "exit was failure"

Enfin, vous pouvez créer un script Shell /usr/games/supertux2.sh:

#!/bin/sh
/usr/games/supertux2
echo "PASSWORD" | Sudo -S shutdown -h now

Et appelez ensuite cela au redémarrage, plutôt que/usr/games/supertux2

11
Dr.Tower