Sebbene le risposte precedenti qui soddisfino tutti i requisiti di perfezione, puoi anche spegnere la macchina non appena le attività sono state completate.
bash
gli script possono essere trap
ped, il che significa che alcuni segnali possono essere intercettati e determinati compiti possono essere eseguiti quando necessario. EXIT
è uno dei segnali che possono essere intrappolati.
Saresti in grado di:
- Imposta un
trap
for per i EXIT
tuoi script di shell automatizzati, che significa terminare le tue attività automatizzate
- Imposta un valore
trap
per .bashrc
EXIT
, ovvero ogni volta che esci da quella macchina, spegnilo.
L'opzione n. 1 sarebbe il caso ideale, a condizione che i tuoi compiti non richiedano ispezioni ad hoc e giudizio manuale.
L'opzione n. 2 riguarderebbe i casi in cui ti dimenticheresti di uscire dal terminale senza spegnerlo. C'è un avvertimento però; se si hanno più terminali sulla stessa macchina aperti e si esce da uno di essi, la macchina si spegnerà comunque. (Può essere scritto per evitarlo, ma non complicherò la soluzione.)
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
Questo può essere alla fine .bashrc
dell'opzione n. 2, da qualche parte nella parte superiore dello script per l'opzione n. 1.
Perché non usare poweroff
alla fine dello script?
Preferisco usare set -eo pipefail
in cima ai miei script. Se si verifica un errore, non fallirà silenziosamente; smetterà di eseguire più comandi. trap
di EXIT
segnale dovrebbe coprire i casi in cui lo script termina prematuramente a causa di errori.
Tuttavia, per le tue attività, ciò potrebbe anche significare che la macchina si spegnerà prima che siano completate.
Ho un semplice bash
modello che uso per rendere più semplice il debug degli script; forse potrebbe essere di qualche utilità. Si prega di vedere questo riassunto .
at
(esecuzione singola).