Aunque las respuestas anteriores aquí satisfacen el requisito de perfección, también puede apagar la máquina tan pronto como se realicen las tareas.
bashlos scripts pueden ser trapped, lo que significa que ciertas señales pueden ser interceptadas y ciertas tareas pueden ejecutarse cuando sea necesario. EXITEs una de las señales que pueden quedar atrapadas.
Podrías:
- Establezca una
trappara EXITsus scripts de shell automatizados, lo que significa la finalización de sus tareas automatizadas
- Establezca un
trappara su .bashrc EXIT, lo que significa que cada vez que cierre sesión en esa máquina, apáguela.
La opción n. ° 1 sería el caso ideal, siempre que sus tareas no requieran inspección ad hoc y juicio manual.
La opción n. ° 2 cubriría los casos en los que olvidaría salir del terminal sin apagarlo. Sin embargo, hay una advertencia; Si tiene varias terminales abiertas para la misma máquina y sale de una de ellas, igual apagará la máquina. (Se puede programar para evitar eso, pero no complicaré la solución).
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
Esto puede ser al final de la .bashrcopción # 2, en algún lugar en la parte superior de su script para la opción # 1.
¿Por qué no usar poweroffal final del guión?
Prefiero usar set -eo pipefailen la parte superior de mis scripts. Si ocurre algún error, no fallará en silencio; dejará de ejecutar más comandos. trapde EXITseñal debe cubrir los casos en que el script termina prematuramente debido a errores.
Sin embargo, para sus tareas, esto también puede significar que la máquina se apagará antes de que se complete.
Tengo una bashplantilla simple que uso para facilitar la depuración de scripts; tal vez podría ser de alguna utilidad. Por favor vea esta esencia .
at(ejecución única).