Я хочу знать, есть ли способ проверить, может ли моя программа выводить вывод терминала, используя цвета или нет.
При выполнении команд, например, less
и просмотре вывода из программы, которая выводит с использованием цветов, вывод отображается неправильно, как
[ESC[0;32m0.052ESC[0m ESC[1;32m2,816.00 kbESC[0m]
Спасибо
Ответы:
На каком языке вы пишете свое заявление?
Обычный подход состоит в том, чтобы проверить, является ли устройство вывода tty, и если это так, проверьте, поддерживает ли этот тип терминала цвета.
Во
bash
, это будет выглядетьВ C вам нужно гораздо больше печатать, но вы можете добиться того же результата, используя isatty и функции, перечисленные в
man 3 terminfo
.источник
Этого должно быть достаточно:
Цвета tput объяснили:
Если вы посмотрите на страницу руководства, вы заметите это:
А также...
Termcap
colors
находится в базе данных terminfo, поэтому вы можете запросить его. Если у вас нулевой статус выхода, то termcap компилируется. Но если у вас есть что-то вроде:Это показывает, что unknowntermcap не существует. Итак, это:
Показывает, что ваша команда была права.
Другие полезные способы:
ура
источник
colors
не задокументировано вtput
справочной странице (!), поэтому я должен искать число> = 8 в stdout или код возврата 0?colors
Возможность документирована в terminfo В (5) . Тестирование с использованиемtput -T dumb colors
,tput -T vt220 colors
,tput -T linux colors
,tput -T xterm colors
предполагает общие ценности не являются-1
(без цвета поддержки) и8
(8 цветов). Обратите внимание, что это применимо только после проверки выходного устройства терминала (например,[ -t 1 ]
илиisatty
).tput colors
возвращает то, что локальная база данных терминала думает о терминале. Это может или не может соответствовать тому, что на самом деле может делать терминал, особенно для типа терминала,xterm
который существует во многих вариантах (в диапазоне от черного и белого до 256 цветов).Для этого случая использования то, что обычно делают программы (например, GNU ls или GNU grep with
--color=auto
), - это использование цветов, если их вывод идет на терминал, и никаких цветов в противном случае. Терминалы, которые не поддерживают последовательности изменения цвета ANSI, достаточно редки, чтобы их пользователи могли переопределить выбор по умолчанию. В любом случае, убедитесь, что в вашем приложении есть возможность включать или выключать цвета.В сценарии оболочки используйте
[ -t 1 ]
для проверки, является ли стандартный вывод терминалом.Из программы, использующей C API, позвоните
isatty(1)
.источник
Попробуйте использовать
less --RAW-CONTROL-CHARS
.В этом примере я использую logtool , который печатает вывод, используя цвета.
Без --RAW-CONTROL-CHARS:
С --RAW-CONTROL-CHAR (Представьте, что это в красивых цветах. Кроме того, я не уверен, почему это
^G
отображается.):источник
Это было бы ошибкой того, что
less
не настроено интерпретировать побеги ANSI; искатьR
в$LESSOPTS
. Что касается определения, знает ли система, что ваш терминал может работать с цветами,tput colors
выведет либо количество цветов, которые она поддерживает, либо-1
он не поддерживает цвета. (Обратите внимание, что некоторые терминалы могут использоватьxterm
вместоxterm-color
описания своих терминалов, но все еще поддерживают цвета.)источник
Если вы хотите добавить цвет к выводу, но только когда цвета поддерживаются, вы можете просто использовать
tput
. http://tldp.org/HOWTO/Bash-Prompt-HOWTO/x405.htmlисточник