
Знаете, это цветной вывод, создаваемый специальными последовательностями символов, например:
echo -e "\e[34m Hello\n \e[0m"
Это даст слово "Hello", окрашенное в синий цвет. Чтобы сделать это, мне пришлось поискать в Интернете, и это сложно, потому что разные источники могут говорить что-то разное. Я думал, что должны быть какие-то руководства, но я не смог их найти. Даже с apropos color
или чем-то похожим. Итак, вопрос - где я могу найти надежные руководства?
решение1
Источников информации слишком много, чтобы перечислить их на этой странице:
- Команда
echo -e
используетрасширениедля отображения\e
в виде ASCII 27 (восьмеричное 33 или "\033"). Портативный способ печати этих используетprintf
(POSIX). Сравните со стандартомecho
(POSIX). Ваш пример можно переписать как
printf "\033[34m Hello\n \033[0m"
- стандарт для цветных побегов -ЕСМА-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Сравнение версий путем подсчета контролей. К счастью, управление цветомпо большей частисовместимо (но см. FAQ по ncurses)Мой терминал показывает некоторые неокрашенные пространства).
Вы также можете прочитать страницы руководства для
tput
, что позволяет вам использоватьterminfo
Возможности в скрипте оболочки. Ваш пример можно переписать какprintf '%s\n' "$(tput setaf 4)Hello$(tput setaf 0)"
несколько источников, таких какBash Prompt HOWTOиРасширенное руководство по написанию сценариев Bashупоминают цвет, но (даже они), как правило, имеют пробелы и упущения и не являются полезными в отношении ECMA-48.
- большинство других источников, которые вы найдете с помощью веб-поиска, копируют из других источников (например, из тех, что цитируются) и т. д., и, как правило, уделяют мало внимания фактическому стандарту.