Dalam menulis shell script, ada salah satu script yang dimana sebelum memulai fungsi utamanya, script tersebut menyiapkan/membuat file-file atau folder temporer yang nantinya akan dimanfaatkan. Setelah fungsi utama dijalankan, pada akhirnya nanti file-file temporer tersebut akan dihapus agar tidak “nyampah”.
Bagaimana jika script terhenti ditengah jalan (atau terjadi suatu kondisi tertentu), sehingga eksekusi script belum sampai kepada baris yang mengisyaratkan untuk menghapus file-file temporer tadi?
Hal yang semacam ini bisa diatasi dengan mengatur signal trapping menggunakan perintah trap
.
Konsep dasar
Perintah trap
ini penggunaannya sangat sederhana, yaitu:
|
|
Misalnya, perintah dibawah ini akan membuat script mengoutputkan string “mantap” tiap kali script tersebut berakhir/diakhiri:
|
|
Argumen pertama bisa diisikan serangkaian perintah yang kompleks atau bisa disederhanakan dengan sebuah fungsi. Sehingga, fungsi yang hendak dipanggil didefinisikan dulu sebelumnya, kemudian diatur trapnya.
Kemudian, pada bagian signal, kita definisikan pada kejadian sinyal apa perintah yang kita tentukan akan dijalankan. Sehingga perlu diketahui macam-macam sinyal yang ada pada sistem operasi semisal Unix (Unix-like, seperti Linux) dan masing-masing fungsinya.
Misal, sinyal yang dikirimkan pada suatu proses ketika mengekan kombinasi CTRL+C pada proses yang berjalan adalah sinyal INTERRUPT (INT atau SIGINT atau kode sinyal no 2). Selangkapnya bisa merujuk pada manpages resmi: https://man7.org/linux/man-pages/man7/signal.7.html atau dari output perintah trap -l
:
|
|
Contoh implementasi
Sebagaimana yang telah disebutkan sebelumnya, salah satu implementasi perintah trap
ini adalah untuk menghapus file-file temporer untuk keperluan script.
Misal, script dibawah ini berfungsi sebagai wrapper untuk memodifikasi file /etc/hosts:
|
|
Dimisalkan pada suatu kondisi tertentu, setelah meng-copy file /etc/hosts script terhenti, maka dengan diaturnya trap diatas, file /tmp/temp-file akan secara otomatis dihapus.
Dengan demikian, kita tidak perlu khawatir script kita meninggalkan temporary files.
Atau contoh lainnya yang lebih advanced adalah memanfaatkan signal trapping ini untuk memungkinkan error tracing. Dengan begitu, ketika ada error pada script, nantinya akan muncul pada baris berapa error tersebut muncul.
|
|
Dengan contoh script demo:
|
|
Ketika dijalankan, maka outputnya akan seperti ini:
|
|
Bagian set -eE
akan dibahas lebih lanjut pada artikel lain tentang Bash Script mode ketat (strict mode).
Penutup
Masih banyak penerapan-penerapan lain dengan menggunakan signal trapping ini, tidak hanya terbatas pada contoh-contoh diatas. Seperti trapping sinyal SIGUSR1 yang itu merupakan sinyal yang didefinisikan oleh user, dan banyak lainnya.
Semoga bermanfaat, barakallahu fiikum.