ananas 10.05.2011 21:57

Tips & tricksАналог atexit на bash

при очередной оптимизации задумался, а как реализовать аналог atexit в шеловских скриптах. перехват SIGTERM, SIGINT не всегда срабатывал, да и выглядел неспортивно. помогло чтение man bash. итак

1
2
3
4
5
6
7
8
9
#! /bin/bash
...
function atexit () {
echo "exiting"
}
...
trap atexit EXIT
...
exit 0



при выходе из скрипта выведется "exiting". ну а что напихать в сам скрипт и конкретную функцию - решайте сами



Тэги: bash scripting
+ 14 -
Похожие Поделиться

uscr 16.05.2011 21:36 #
О! Это очень здорово! Жаль только, что я не знаю, кто такая atexit.

В чём отличие от:

1
2
kill_all_humans param0 param1
return 0

?
kstep 16.05.2011 22:11 #
В том, что atexit сработает в любом случае при выходе из любого места скрипта по exit.

Например:

1
2
3
4
5
6
7
8
function atexit() {
    echo "exiting"
}
trap atexit EXIT

[ x$1 = x1 ] && echo one && exit 1
[ x$1 = x2 ] && echo two && exit 2
exit 0


напечатает "exiting" при любом значении $1, то есть не важно по какой команде прошёл выход, всегда выполнится заданный код. Полезно, например, для подчистки мусора за скриптом (ну там временные файлы удалить, чё).
ananas 16.05.2011 22:36 #
не только по exit. функция выполнится по окончании работы интерпретатора. т.е. если кильнуть процесс извне - atexit тоже отработает
ananas 16.05.2011 22:37 #
знакомьтесь - man 3 atexit
lava 17.05.2011 18:21 #
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#! /bin/sh
...
atexit () {
    echo "exiting"
    exit $1
}
...
trap atexit EXIT
...
exit 0