Bien que les réponses précédentes ici satisfassent toutes à la perfection, vous pouvez également mettre votre machine hors tension dès que les tâches sont terminées.
bashles scripts peuvent être trapped, ce qui signifie que certains signaux peuvent être interceptés et certaines tâches peuvent être exécutées en cas de besoin. EXITest l'un des signaux qui peuvent être piégés.
Vous pourrez:
- Définissez un
trappour EXITvos scripts shell automatisés, ce qui signifie la fin de vos tâches automatisées
- Définissez un
trappour votre .bashrc EXIT, ce qui signifie que lorsque vous vous déconnectez de cette machine, éteignez-le.
L'option n ° 1 serait le cas idéal, à condition que vos tâches ne nécessitent pas d'inspection ad hoc et de jugement manuel.
L'option # 2 couvrirait les cas où vous oublieriez de quitter le terminal sans éteindre. Il y a cependant une mise en garde; si vous avez plusieurs terminaux ouverts sur la même machine et que vous sortez de l'un d'eux, il éteindra tout de même la machine. (Il peut être scripté pour éviter cela, mais je ne compliquerai pas la solution.)
cleanup(){
# Do some tasks before terminating
echo oh la la, cleaning is so nice
echo "See you later, world"
sudo poweroff & # finally shutdown
}
trap cleanup EXIT
Cela peut être à la fin de l' .bashrcoption # 2, quelque part en haut de votre script pour l'option # 1.
Pourquoi ne pas utiliser poweroffà la fin du script?
Je préfère utiliser set -eo pipefailen haut de mes scripts. Si une erreur se produit, elle n'échouera pas en silence; il cessera d'exécuter plus de commandes. trapde EXITsignal doit couvrir les cas où le script se termine prématurément en raison d'erreurs.
Cependant, pour vos tâches, cela peut également signifier que la machine s'arrêtera avant d'être terminée.
J'ai un bashmodèle simple que j'utilise pour faciliter le débogage des scripts; cela pourrait peut-être être utile. S'il vous plaît voir cet essentiel .
at(exécution unique).