sala@home:~$

trap

Ha egy olyan scriptet írunk ami sok-sok ideiglenes fájlt hoz létre, akkor illik ezeket eltakarítani a script futása után. Többnyire a script legvégén szoktam a takaritást elvégezni, de ez nyilván nem nagyon segít amikor a script időközben meghal, vagy leállítom CTRL-C-vel.

Sokkal szebben lehet a takarítást trap segítéségével végezni. A következő egyszerű script 2 fájlt is létrehoz, és a kettő között 5 másodpercet pihen:

#!/bin/bash
cleanup() {
  echo "Cleaning up..."
  rv=$?
  rm -f aaa.txt bbb.txt
  echo "Cleaning finished"
  exit $rv
}
trap cleanup EXIT
touch aaa.txt
sleep 5
touch bbb.txt

A takaritást végző kódrészletet a cleanup függvénybe tettem. Nem feltétenül kell külön eljárást létrehoznunk erre, de így azért szebb.

Ha lefuttatjuk a scriptet, akkor szépen eltakarít maga után:

$ ./trap_test.sh
Cleaning up...
Cleaning finished

Ha elindítjuk a scriptet, de CTRL-C-vel megállítjuk a sleep közben, akkor is rendesen elvégzi a takarítást:

$ ./trap_test.sh
^CCleaning up...
Cleaning finished

Az EXIT helyett részletesebben is szabályozhatjuk, hogy milyen signalra milyen parancs fusson le. Ha pl. a fenti példában EXIT-et SIGINT-re cserélem, akkor rendes futásnál nem nem fut le cleanup, csak CTRL-C-nél.