Meskipun jawaban sebelumnya di sini semuanya memenuhi persyaratan untuk kesempurnaan, Anda juga dapat mematikan mesin segera setelah tugas selesai.
bashskrip dapat di- trapped, artinya sinyal-sinyal tertentu dapat dicegat dan tugas-tugas tertentu dapat dijalankan ketika dibutuhkan. EXITadalah salah satu sinyal yang bisa dijebak.
Anda akan dapat:
- Tetapkan
trapuntuk EXITskrip shell otomatis Anda, yang berarti penghentian tugas otomatis Anda
- Set a
trapfor 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 .bashrcopsi # 2, di suatu tempat di bagian atas skrip Anda untuk opsi # 1.
Mengapa tidak menggunakan poweroffdi akhir skrip?
Saya lebih suka menggunakan set -eo pipefaildi bagian atas skrip saya. Jika ada kesalahan, itu tidak akan gagal; itu akan berhenti mengeksekusi lebih banyak perintah. trapdari EXITsinyal 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 bashtemplate sederhana yang saya gunakan untuk membuat scripting lebih mudah di-debug; mungkin mungkin ada gunanya. Silakan lihat intinya .
at(eksekusi satu kali).