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


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.