В зависимости от источника (и веса, который вы можете указать), 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.
Дополнительная литература:
В строгой оболочке POSIX ловушка EXIT
оценивается перед выходом из оболочки из-за выполнения exit
или из-за выполнения последней команды в сценарии. Он не выполняется, если оболочка завершает работу по сигналу.
Если вы хотите перехватить Ctrl+C , вам придется перехватитьINT
(сигнал "прерывание" ). Если закрытие терминала посылает скрипту сигналHUP
(«повесить трубку -» ), вам также придется перехватить его.
trap 'rm -rf "$TMP"; trap - EXIT; exit' EXIT INT HUP
Вы также можете захотеть перехватить TERM
, общий сигнал "завершения", отправляемый по умолчанию kill
.
Приведенная выше ловушка явно сбрасывает ловушку EXIT
, чтобы она не вызывалась снова при завершении сценария из-за получения одного из перечисленных сигналов.