Ловушка EXIT с POSIX

В зависимости от источника (и веса, который вы можете указать), shar восходит к примерно 1980 году. В форме, которую вы, возможно, знаете, она исходит из реализации Рича Зальца, представленной в 1988 году, и постепенно улучшается в течение следующих нескольких лет.

shar изначально был удобством для объединения текстовых файлов. uuencoding (способ отправки двоичных файлов) существует как минимум столько же: я вижу его в 2.0BSD, датированном 1989 годом, где на странице руководства говорится, что он был написан Марком Хортоном. Он использовался с шаром в 1980-х годах, хотя самое раннее использование в сочетании с шар неуловимо. README в версии cshar Ричарда Зальца 1988 года гласит:

On a philosophical note, I've tried to make this all as general as
possible for shipping sources around.  I'm not interested in binaries, so
things like automatically running uuencode don't interest me a great
deal.  I haven't come up with a good portable way to split files into
pieces if they're too large, and doubt I ever will.  There are too many 
installation parameters, but I'm not particularly worried about that:  Once
you get things working, consider it incentive to avoid future changes.  
It would be nice if I could use Larry's meta-Config, but that only works 
on Unix (and Eunice).  Send me your config.h file so that others can benefit.

Однако параллельный (месяц назад) Уильям Дэвидсен shar2 в comp.sources .misc (том 3, выпуск 14) поддерживает uuencode.

Дополнительная литература:

3
21.05.2019, 00:46
1 ответ

В строгой оболочке POSIX ловушка EXITоценивается перед выходом из оболочки из-за выполнения exitили из-за выполнения последней команды в сценарии. Он не выполняется, если оболочка завершает работу по сигналу.

Если вы хотите перехватить Ctrl+C , вам придется перехватитьINT(сигнал "прерывание" ). Если закрытие терминала посылает скрипту сигналHUP(«повесить трубку -» ), вам также придется перехватить его.

trap 'rm -rf "$TMP"; trap - EXIT; exit' EXIT INT HUP

Вы также можете захотеть перехватить TERM, общий сигнал "завершения", отправляемый по умолчанию kill.

Приведенная выше ловушка явно сбрасывает ловушку EXIT, чтобы она не вызывалась снова при завершении сценария из-за получения одного из перечисленных сигналов.

6
27.01.2020, 21:20

Теги

Похожие вопросы