Есть ли страница руководства для вывода цветных оболочек?

23

Вы знаете, что цветной вывод сделан специальными последовательностями символов, например:

echo -e "\e[34m Hello\n \e[0m"

Это даст слово «Hello», окрашенное в синий цвет. Для этого мне пришлось искать в Интернете, и это сложно, потому что разные источники могут сказать что-то другое. Я думал, что должны быть какие-то инструкции, но я не мог их найти. Даже с apropos colorили что-то подобное. Итак, вопрос - где я могу найти надежные инструкции?

Сергий
источник
2
Вы ищете документацию по кодам выхода ANSI. (Я склонен использовать страницу Википедии, когда мне нужно найти ее.)
chepner
Обратите внимание, что вам не обязательно знать эти escape-последовательности. Несколько оболочек (по крайней мере, tcsh, zsh, fish) имеют встроенную поддержку для вывода цветов без необходимости явной записи этих последовательностей.
Стефан Шазелас

Ответы:

27

На этой странице слишком много источников информации для перечисления:

  • Команда echo -eиспользует расширение для отображения \eкак ASCII 27 (восьмеричное 33 или "\ 033"). Портативный способ распечатать эти использует printf(POSIX). Сравните со стандартным echo(POSIX).
  • Ваш пример может быть переписан как

    printf "\033[34m Hello\n \033[0m"

  • стандарт для цветовых переходов - ECMA-48 (функции управления для наборов кодированных символов).
  • В ECMA-48 в 8.3.117 SGR - SELECT GRAPHIC RENDITION перечислены последовательности управления для установки 8 цветов переднего плана и 8 цветов фона.
  • В нем также перечислены коды 39/49 «цвет дисплея по умолчанию (определяется реализацией)» и 38/48 «, зарезервированные для будущей стандартизации; предназначенные для установки цвета переднего плана символа, как указано в ISO 8613-6 [Рекомендация CCITT T.416]». То есть есть рекомендация другой организации, но она не была (до сих пор, после 24 лет) частью стандарта.
  • Внимательно прочитав его, вы можете заметить, что во многих местах стандарт расплывчат, что допускает различные толкования. Он описывает синтаксис этих управляющих последовательностей, но не описывает их поведение . Для этого вам нужно перейти к документации для соответствующих терминалов.
  • документация для xterm находится в управляющих последовательностях XTerm , что предполагает знакомство с документацией DEC, найденной на http://vt100.net
  • для других терминалов их страницы руководства могут перечислять элементы управления (как это сделано для консоли Linux в console_codes ).
  • другие терминалы документируют себя как "xterm"; для обсуждения см. xterm FAQ. Сравнение версий путем подсчета элементов управления . К счастью, элементы управления цветом в основном совместимы (но см. Часто задаваемые вопросы по ncurses. Мой терминал показывает некоторые неокрашенные пробелы ).
  • Вы также можете прочитать страницы руководства для tput, что позволяет использовать terminfoвозможности в сценарии оболочки. Ваш пример может быть переписан как

    printf '%s\n' "$(tput setaf 4)Hello$(tput setaf 0)"
    
  • некоторые источники, такие как Bash Prompt HOWTO и Advanced Bash-Scripting Guide, упоминают цвет, но (даже они), как правило, имеют пробелы и упущения и не помогают в отношении ECMA-48.

  • большинство других источников, которые вы найдете с копией веб-поиска из других источников (например, цитируемых) и т. д., и, как правило, уделяют мало внимания фактическому стандарту.
Томас Дики
источник
Соответствующим разделом в ECMA-48 является 8.3.117 - «SGR - ВЫБРАТЬ ГРАФИЧЕСКОЕ ИЗДАНИЕ». В нем есть единственное упоминание слова «синий», и найденные там коды работают, по крайней мере, в моем XTerm.
10
да - я добавлю уточнение.
Томас Дики
2
Это действительно отличный ответ - желаю, чтобы все ответы были такими же, как ваши
Сергий
1
xterm также поддерживает 256-цветный режим, предположительно это описано в одном из приведенных выше руководств.
sendmoreinfo
Смотрите wynnnetherland.com/journal/… для получения полезной информации, включая пакет grc, который может выполнять все виды раскрашивания с помощью вывода команды.
Джо