Чи є сторінка вручну для кольорового виводу оболонки?


23

Ви знаєте, що кольоровий вихід зроблений спеціальними послідовностями char, наприклад:

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

Це призведе до появи слова "Hello", пофарбованого в синій колір. Для цього мені довелося шукати в Інтернеті, і це важко, тому що різні джерела можуть сказати щось інше. Я думав, що мають бути деякі посібники, але я не міг їх знайти. Навіть з apropos colorчи чимось подібним. Отже, питання - де я можу знайти надійні посібники?


2
Ви шукаєте документацію про ANSI-коди втечі. (Я схильний використовувати сторінку Вікіпедії, коли мені потрібно подивитися.)
chepner

Зауважте, що вам не обов'язково знати ці послідовності втечі. Кілька оболонок (tcsh, zsh, принаймні риба) мають вбудовану підтримку для виведення кольорів без необхідності чітко писати ці послідовності.
Стефан Шазелас

Відповіді:


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 - ВИБІР ГРАФІЧНОГО ВІДПОВІДУ перелічені контрольні послідовності для встановлення 8 кольорів переднього плану та 8 кольорів фону.
  • Він також перелічує коди 39/49 "колір відображення за замовчуванням (визначено реалізацією)" та 38/48 ", зарезервований для майбутньої стандартизації; призначений для встановлення кольору переднього плану символів, як визначено в ISO 8613-6 [Рекомендація CCITT T.416]". Тобто є рекомендація іншої організації, але вона не була (поки що, через 24 роки) частиною стандарту.
  • уважно читаючи його, ви можете помітити, що стандарт у багатьох місцях розпливчастий, що дозволяє різні тлумачення. Він описує синтаксис цих контрольних послідовностей, але не описує їх поведінку . Для цього вам потрібно перейти до документації для відповідних терміналів.
  • документація на xterm знаходиться в XTerm Control Sequences , яка передбачає знайомство з документацією DEC, знайденою на http://vt100.net
  • для інших терміналів на їхніх сторінках керівництва можуть бути перераховані елементи керування (як це робиться для консолі Linux у консольних_кодах ).
  • інші термінали документують себе як "xterm"; для обговорення див. FAQ xterm FAQ Порівняння версій шляхом підрахунку елементів керування . На щастя, кольорові елементи керуються здебільшого сумісними (але дивіться відповіді на відповідні запитання. Мій термінал відображає незабарвлені пробіли ).
  • ви також можете прочитати сторінки керівництва для 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.
l0b0

так - я додам уточнення.
Томас Дікі

2
Це дійсно чудова відповідь - бажайте, щоб усі відповіді були вашими
Сергій

1
xterm також підтримує 256-кольоровий режим, імовірно, це задокументовано в одній з вищевказаних посібників.
sendmoreinfo

Дивіться wynnnetherland.com/journal/… про купу корисної інформації, включаючи пакет grc, який може робити всілякі кольорові речі з командним висновком.
Джо
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.