Saya dapat mengatur trap
dalam skrip bash tetapi tidak pada fungsi bash.
Misalnya, source
kode di bawah ini dan jalankan f
, sekarang coba Ctrl+ C, itu belum terperangkap!
Bagaimana cara mengatur trap
fungsi bash?
4 trap ctrl_c INT
5
6 ctrl_c () {
7 echo "** Trapped CTRL-C"
8 }
9
10
11 f () {
12 for i in `seq 1 100`; do
13 sleep 1
14 echo -n "."
15 done
16 }
f
di akhir kode Anda, dan menghapus spasi darif ()
.Jawaban:
Itu karena ia mengirimkan SIGINT ke proses di latar depan alih-alih ke
bash
(yang menjalankan skrip). Jika Anda ingin melakukan ini, buat fungsinya asinkron lalu gunakanwait
(yang akan bertindak seperti yang diharapkan dan gunakan perangkap).sumber
f
ada dalam pipaecho 123 | f
, maka itu tidak menjebak?(command | command) &
Protip: Kirim proses foreground QUIT dengan Ctrl- \when Ctrl- C, - Z, - Dtidak berfungsi.
Kosongkan jebakan di akhir eksekusi dengan
trap - list of signals here
Kegembiraan pada sistem non-produksi: Coba atur jebakan untuk semua sinyal yang masuk akal (mis., Bukan KILL).
kill -l
(bukan huruf kecil L bukan angka 1 atau pipa |)sumber
Saya pikir Anda harus membuat fungsi global
sumber
INT
danSIGINT
sinonim - tidak ada bedanya.