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.