Ідея полягає в тому, щоб моя програма знала, що не забарвлювати вихід, якщо програма не може надрукувати, скажімо, вести реєстрацію виводу через роботу 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
З програми, що використовує API C, дзвоніть 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);