Что означает set -T
в bash? Что оно делает? Я считаю, что это связано с ловушками в Unix, но я не уверен.
Я нашел это:
Многие из таких конструкций становятся более простыми, если ловушки будут вызываться немедленно, пока дочерний план на переднем плане еще работает. Вы бы просто установили обработчик ловушек, который «что-то» делает с проблемой, и он будет вызываться каждый раз, когда вы нажимаете SIGINT (или SIGQUIT). Так же, как обработчик сигналов в программах на C вызывается сразу. Может быть, я слишком большой программист на Си, но я считаю, что задержанное поведение sh не очень интуитивно понятно.
#! /bin/sh onsig() { trap SIGINT kill -SIGINT $$ } set -T # set async execution of traps on FreeBSD trap onsig SIGINT ./some-blocking-program set +T # set traps execution behaviour back to normal
Это делает обработчик ловушек немного более сложным, но позволяет вам, как обычно, написать основную часть сценария оболочки, не учитывая, что программа может блокироваться, и предпринимая соответствующие действия.