Идея состоит в том, чтобы мое приложение знало, что не нужно раскрашивать вывод, если программа не может напечатать, скажем, протоколирование вывода из задания cron в файл, нет необходимости записывать цветной вывод, но при запуске вручную, мне нравится просматривать вывод цветной.
Для этого случая использования то, что обычно делают программы (например, GNU ls или GNU grep with --color=auto
), - это использование цветов, если их вывод идет на терминал, и никаких цветов в противном случае. Терминалы, которые не поддерживают последовательности изменения цвета ANSI, достаточно редки, чтобы их пользователи могли переопределить выбор по умолчанию. В любом случае, убедитесь, что в вашем приложении есть возможность включать или выключать цвета.
В сценарии оболочки используйте [ -t 1 ]
для проверки, является ли стандартный вывод терминалом.
# option processing has set $color to yes, no or auto
if [ $color = auto ]; then
if [ -t 1 ]; then color=yes; else color=no; fi
fi
Из программы, использующей C API, позвоните isatty(1)
.
# option processing has set use_color to 0 for no, 1 for yes or 2 for auto
if (use_color == 2) use_color = isatty(1);