Embora todas as respostas anteriores satisfaçam o requisito de perfeição, você também pode desligar a sua máquina assim que as tarefas forem concluídas.
Os scripts
bash
podem ser trap
ped, o que significa que certos sinais podem ser interceptados e certas tarefas podem ser executadas quando necessário. EXIT
é um dos sinais que podem ser capturados.
Você seria capaz de:
- Defina um
trap
para EXIT
de seus scripts de shell automatizados, o que significa
término de suas tarefas automatizadas
- Defina um
trap
para seu .bashrc
EXIT
, ou seja, sempre que você fizer logout
dessa máquina, desligue-a.
A opção nº 1 seria o caso ideal, desde que suas tarefas não requeiram inspeção ad hoc e julgamento manual.
A opção nº 2 cobriria os casos em que você esqueceria de sair do terminal sem desligar. Há uma ressalva embora; se você tiver vários terminais para a mesma máquina abertos e você sair de um deles, ele ainda desligará a máquina da mesma forma. (Pode ser roteirizado para evitar isso, mas não vou complicar a solução.)
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
Isso pode ser no final de .bashrc
para a opção nº 2, em algum lugar na parte superior do seu script para a opção nº 1.
Por que não usar poweroff
no final do script?
Eu prefiro usar set -eo pipefail
no topo dos meus scripts. Se algum erro acontecer, não falhará silenciosamente; Parará de executar mais comandos. O sinal trap
de EXIT
deve cobrir os casos em que o script termina prematuramente devido a erros.
No entanto, para as suas tarefas, isso também pode significar que a máquina será desligada antes de serem concluídas.
Eu tenho um modelo simples de bash
que uso para facilitar a depuração de scripts; talvez possa ser de alguma utilidade. Por favor, veja esta essência .