Kabul edilen cevap temelde doğru, sadece bazı şeyleri açıklığa kavuşturmak istiyorum.
Aşağıdaki örnek
iyi çalışıyor:
#!/bin/bash
cleanup() {
rv=$?
rm -rf "$tmpdir"
exit $rv
}
tmpdir="$(mktemp)"
trap "cleanup" INT TERM EXIT
# Do things...
Ama bir fonksiyonu olmadan, temizleme inline yapıyor eğer daha dikkatli olmak zorunda. Örneğin bu çalışmaz:
trap "rv=\$?; rm -rf $tmpdir; exit \$rv" INT TERM EXIT
Ayrıca o değerlendirilecektir alacak gibi
$tmpdir
kaçmak isteyebilirsiniz
tuzak hattı:
trap "rv=$?; rm -rf $tmpdir; exit $rv" INT TERM EXIT
Bunun yerine $rv
ve $?
değişkenleri kaçmak zorunda çalıştırılır ve tmpdir
değeri daha sonra değişirse, beklenen davranışı vermez.
Düzenleme: Bash komut dosyalarınızı kontrol etmek ve bunun gibi sorunlardan haberdar olmak için shellcheck'u kullanın.
trap 'foo' EXIT veya 'foo' CHLD? –