Я хочу добавить пару функций в мой .bashrc
.Функции могут выполняться долго, поэтому я хотел бы иметь возможность убить их с помощью CTRL+C
и распечатать некоторую информацию, когда это произойдет.Я могу захватить CTRL+C
, перехватывая SIGINT
, но я не уверен, как правильно установить разные обработчики ловушек для разных функций в одном и том же скрипте (.bashrc
).
Я придумалэто решение, которое, кажется, работает:
function foo()
{
trap 'echo "foo() stopped"' SIGINT
while true; do
sleep 1
echo "foo() working..."
done
}
function bar()
{
trap 'echo "bar() stopped"' SIGINT
while true; do
sleep 1
echo "bar() working..."
done
}
Пример вывода:
$ foo
foo() working...
foo() working...
^Cfoo() stopped
$ bar
bar() working...
bar() working...
^Cbar() stopped
Теперь мои вопросы:
- Правильно ли я понимаю, что каждый разЯ делаю
trap ...
внутри функции, она сбрасывает обработчик сигнала для всего сеанса bash (процесса)?Или он каждый раз создает новый обработчик? - Это хорошее решение в целом или есть лучшее решение этой проблемы?