Meskipun jawaban sebelumnya di sini semuanya memenuhi persyaratan untuk kesempurnaan, Anda juga dapat mematikan mesin segera setelah tugas selesai.
bash
skrip dapat di- trap
ped, artinya sinyal-sinyal tertentu dapat dicegat dan tugas-tugas tertentu dapat dijalankan ketika dibutuhkan. EXIT
adalah salah satu sinyal yang bisa dijebak.
Anda akan dapat:
- Tetapkan
trap
untuk EXIT
skrip shell otomatis Anda, yang berarti penghentian tugas otomatis Anda
- Set a
trap
for your .bashrc
EXIT
, artinya kapan pun Anda keluar dari mesin itu, matikan.
Opsi # 1 akan menjadi kasus yang ideal, asalkan tugas Anda tidak memerlukan inspeksi adhoc dan penilaian manual.
Opsi # 2 akan mencakup kasing di mana Anda akan lupa untuk keluar dari terminal tanpa mematikan. Namun ada peringatan; jika Anda memiliki beberapa terminal ke mesin yang sama terbuka dan Anda keluar dari salah satunya, itu akan tetap mematikan mesin sama saja. (Dapat ditulis untuk menghindari itu, tapi saya tidak akan menyulitkan solusinya.)
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
Ini bisa di akhir .bashrc
opsi # 2, di suatu tempat di bagian atas skrip Anda untuk opsi # 1.
Mengapa tidak menggunakan poweroff
di akhir skrip?
Saya lebih suka menggunakan set -eo pipefail
di bagian atas skrip saya. Jika ada kesalahan, itu tidak akan gagal; itu akan berhenti mengeksekusi lebih banyak perintah. trap
dari EXIT
sinyal harus mencakup kasus di mana script berakhir sebelum waktunya karena kesalahan.
Namun untuk tugas Anda, ini mungkin juga berarti mesin akan mati sebelum selesai.
Saya memiliki bash
template sederhana yang saya gunakan untuk membuat scripting lebih mudah di-debug; mungkin mungkin ada gunanya. Silakan lihat intinya .
at
(eksekusi satu kali).