Предотвращение управляющих последовательностей tput при перенаправлении вывода скрипта в файл

Объяснение состоит в том, что bash реализует WCE (ожидание и совместный выход) для SIGINT и SIGQUIT согласно http://www.cons.org/cracauer/sigint.html . Это означает, что если bash получает SIGINT или SIGQUIT во время ожидания завершения процесса, он будет ждать, пока процесс не завершится, и выйдет сам, если процесс завершился по этому сигналу. Это гарантирует, что программы, использующие SIGINT или SIGQUIT в своем пользовательском интерфейсе, будут работать должным образом (если сигнал не привел к завершению программы, сценарий продолжится в обычном режиме).

Обратной стороной является программа, которая улавливает SIGINT или SIGQUIT, но затем завершает работу из-за этого, но с использованием обычного exit () вместо повторной отправки сигнала себе. Может быть невозможно прервать скрипты, вызывающие такие программы. Я думаю, что реальное исправление есть в таких программах, как ping и ping6.

Аналогичное поведение реализовано в ksh93 и / bin / sh FreeBSD, но не в большинстве других оболочек.

3
02.03.2018, 11:29
1 ответ

короткий :tput этого не делает.

дольше :ваш скрипт может это сделать

Например,проверьте, является ли стандартный вывод терминалом:

if [ -t 1 ]
then
    color=$( tput setaf 1 )
    normal=$( tput sgr0 )
else
    color=""
    normal=""
fi
5
27.01.2020, 21:18

Теги

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