GNU/Linux >> Belajar Linux >  >> Linux

Perintah Bash trap Dijelaskan

Pendahuluan

Skrip shell dapat mengalami masalah selama eksekusinya, menghasilkan sinyal kesalahan yang menyela skrip secara tidak terduga.

Kesalahan terjadi karena desain skrip yang salah, tindakan pengguna, atau kegagalan sistem. Skrip yang gagal dapat meninggalkan file sementara yang menyebabkan masalah saat pengguna memulai ulang skrip.

Tutorial ini akan menunjukkan cara menggunakan trap perintah untuk memastikan skrip Anda selalu keluar secara terduga.

Prasyarat

  • Akses ke terminal/baris perintah.
  • Editor teks (Nano, Vi/Vim, dll.).

Sintaks perangkap bash

Sintaks untuk trap perintahnya adalah:

trap [options] "[arguments]" [signals]

Perintah tersebut memiliki komponen berikut:

  • Opsi memberikan fungsionalitas tambahan pada perintah.
  • Argumen adalah perintah trap dijalankan setelah mendeteksi sinyal. Kecuali jika perintahnya hanya satu kata, itu harus diapit dengan tanda kutip (" " ). Jika argumen berisi lebih dari satu perintah, pisahkan dengan titik koma (; ).
  • Sinyal adalah pemberitahuan asinkron yang dikirim oleh sistem, biasanya menunjukkan gangguan yang dibuat pengguna atau terkait sistem. Sinyal dapat dipanggil dengan nama atau nomornya.

Opsi Perangkap Bash

trap perintah menerima opsi berikut:

  • -p - Menampilkan perintah sinyal.
  • -l - Mencetak daftar semua sinyal dan nomornya.

Di bawah ini adalah daftar lengkap 64 sinyal dan nomornya:

# Sinyal # Sinyal # Sinyal
1 SIGHUP 23 SIGURG 45 SIGRTMIN+11
2 MASUKKAN 24 SIGXCPU 46 SIGRTMIN+12
3 SIGQUIT 25 SIGXFSZ 47 SIGRTMIN+13
4 SIGILL 26 SIGVTALRM 48 SIGRTMIN+14
5 SIGTRAP 27 SIGPROF 49 SIGRTMIN+15
6 SIGABRT 28 SIGWINCH 50 SIGRTMAX-14
7 SIGBUS 29 SIGIO 51 SIGRTMAX-13
8 SIGFPE 30 SIGPWR 52 SIGRTMAX-12
9 SIGKILL 31 SIGSYS 53 SIGRTMAX-11
10 SIGUSR1 32 MENUNGGU 54 SIGRTMAX-10
11 SIGSEGV 33 SIGLWP 55 SIGRTMAX-9
12 SIGUSR2 34 SIGRTMIN 56 SIGRTMAX-8
13 SIGPIPE 35 SIGRTMIN+1 57 SIGRTMAX-7
14 SIGALRM 36 SIGRTMIN+2 58 SIGRTMAX-6
15 SIGTERM 37 SIGRTMIN+3 59 SIGRTMAX-5
16 SIGSTKFLT 38 SIGRTMIN+4 60 SIGRTMAX-4
17 SIGCHLD 39 SIGRTMIN+5 61 SIGRTMAX-3
18 SIGCONT 40 SIGRTMIN+6 62 SIGRTMAX-2
19 SIGSTOP 41 SIGRTMIN+7 63 SIGRTMAX-1
20 SIGTSTP 42 SIGRTMIN+8 64 SIGRTMAX
21 SIGTTIN 43 SIGRTMIN+9
22 SIGTTOU 44 SIGRTMIN+10

Sinyal yang paling umum digunakan dengan trap perintahnya adalah:

  • SIGHUP (1) - Pembersihan rapi
  • SIGINT (2) - Interupsi
  • SIGQUIT (3) - Keluar
  • SIGABRT (6) - Batal
  • SIGALRM (14) - Jam alarm
  • SIGTERM (15) - Hentikan

Cara Menggunakan perangkap di Bash

Skenario tipikal untuk menggunakan trap perintah menangkap SIGINT sinyal. Sinyal ini dikirim oleh sistem saat pengguna menginterupsi eksekusi skrip dengan menekan Ctrl+C .

Contoh script berikut mencetak kata "Test " setiap detik hingga pengguna menyela dengan Ctrl+C . Script kemudian mencetak pesan dan keluar.

trap "echo The script is terminated; exit" SIGINT

while true
do
    echo Test
    sleep 1
done

while loop pada contoh di atas dijalankan tanpa batas. Baris pertama skrip berisi trap perintah dan instruksi untuk menunggu SIGINT sinyal, lalu cetak pesan dan keluar dari skrip.

trap perintah ini sering digunakan untuk membersihkan file-file sementara jika skrip keluar karena gangguan. Contoh berikut mendefinisikan cleanup fungsi, yang mencetak pesan, menghapus semua file yang ditambahkan ke $TRASH variabel, dan keluar dari skrip.

$TRASH=$(mktemp -t tmp.XXXXXXXXXX)

trap cleanup 1 2 3 6

cleanup()
{
  echo "Removing temporary files:"
  rm -rf "$TRASH"
  exit
}

...

trap pada contoh di atas menjalankan cleanup berfungsi saat mendeteksi salah satu dari empat sinyal:SIGHUP , SIGINT , SIGQUIT , atau SIGABRT . Sinyal dirujuk dengan nomornya.

Anda juga dapat menggunakan trap untuk memastikan pengguna tidak dapat mengganggu eksekusi skrip. Fitur ini penting saat menjalankan perintah sensitif yang interupsinya dapat merusak sistem secara permanen. Sintaks untuk menonaktifkan sinyal adalah:

trap "" [signal]

Tanda kutip ganda berarti tidak ada perintah yang akan dieksekusi. Misalnya, untuk menjebak SIGINT dan SIGABRT sinyal, ketik:

trap "" SIGINT SIGABRT
[a command that must not be interrupted]

Jika Anda ingin mengaktifkan kembali sinyal kapan saja selama skrip, setel ulang aturan dengan menggunakan simbol tanda hubung:

trap - SIGINT SIGABRT
[a command that can be interrupted]

Linux
  1. Perintah Sejarah di Linux Dijelaskan Secara Mendalam

  2. perintah ekspor bash

  3. Jalankan perintah bash pada pipa jenkins

  1. Operasi Matematika Bash (Aritmatika Bash) Dijelaskan

  2. Perintah tunggu bash

  3. Bash baca Perintah

  1. Bash Heredoc

  2. Perintah Sumber Bash

  3. Perintah Sejarah di Linux (Riwayat Bash)