shell

lf335, SystemAdministration: Добавление цвета в Shell -- использование кодов ANSI <-- | Домой | Карта | Индекс | Поиск Новости | Архивы | Ссылки | Про LF эта страница доступна на следующих языках: English ChineseGB Deutsch Francais Nederlands Russian Turkce Polish автор Nico Golde Об авторе: В настоящее время Nico является студентом. Уже несколько лет он серьезно увлекается Linux, еще он принимает участие в нескольких проектах Open Source. Перевод на Русский: Пухляков Кирилл Содержание: Введение Настройка Shell'а Управляющие последовательности Использование цвета в Shell'е Свойства текста Еще одно приложение Примеры на C Примеры init-скриптов Обратная связь Страница отзывов Добавление цвета в Shell -- использование кодов ANSI Резюме: На ANSI совместимых терминалах (таких как xterm, rxvt, konsole ...) текст может быть отображен в цвете. В этой заметке мы и поговорим об этом. _________________ _________________ _________________ Введение В реальной жизни каждый пользователь Linux прибегает к услугам Bash. Выглядит конечно shell скучновато, но это можно изменить и сделать его более привлекательным. Например сделав приглашение shell в цвете. В этой заметке я буду рассказывать применительно к Bash shell. Управляющие последовательности могут различаться в разных терминалах, мы будем рассматривать ANSI терминал. Настройка Shell'а Настройка цвета для shell'а осуществляется посредством персонального конфигурационного файла ~/.bashrc или глобального файла /etc/bashrc. Приглашение shell'а устанавливается переменной PS1 в bashrc. В общем случае это выглядит следующим образом: ~/.bashrc: PS1="\s-\v\$ " \s - это название shell'а, а -\v - его версия. В конце мы поставили символ $. Почти во всех дистрибутивах Linux используется следующий вариант: ~/.bashrc: PS1="\u@\h \w \$ " Т.е. - пользователь - текущий каталог и $. Управляющие последовательности Чтобы раскрасить приглашение можно использовать управляющие последовательности символов, которые являются не чем иным как инструцией shell'у выполнить какое-либо действие. Управляющая последовательность обычно начинается с ESC ( в shell'е это выглядит как ^[ или \033 - ESC это 27 в десятичной и 33 в шестнадцатиричной ). Для использования управляющей последовательности непосредственно в shell'е необходимо вначале набрать ctrl-v: CTRL-v ESC. Использование цвета в Shell'е Рассмотрим использование цвета на примере приглашения. ~/.bashrc: PS1="\[\033[0;32;40m\u@\h:\w\$ \]" Приглашение будет выведено зеленым цветом: nico@ebrain:~$ Управляющая последовательность начинается с \033, с [ начинается определение цвета. Цифра 0 определяет ширину шрифта по умолчанию, другие возможности опишу позже. Чтобы предотвратить отображение управляющей последовательности на дисплее необходимо заключить строку в \[ и \]. Далее определяем цвет шрифта ( в нашем примере это 32 - зеленый ). Цвет фона - 40 ( черный ). Чтобы текст после приглашения не печатался зеленым закрываем управляющую последовательность символами \033[0m - цветом shell'а по умолчанию. Для раскраски шрифта и фона можно использовать 8 цветов. Красный, зеленый, желтый, синий, пурпурный, бирюзовый и белый. Коды для этих цветов следующие: 30 (черный), 31 (красный), 32 (зеленый), 33 (желтый), 34 (синий), 35 (пурпурный), 36 (бирюзовый), 37 (белый). Цвет для фона определяется теми же кодами, но вместо '3' используется '4': 40, 41, 42, 43, 44, 45, 46, 47. Пример: ~/.bashrc: PS1="\[\033[0;37;44m\u@\033[0;32;43m\h:\033[0;33;41m\w$\033[0m\]" Получается цветное приглашение: nico@ ebrain: ~$ Протестировать эту настройку можно набрав export PS1="string", позже мы поместим это в .bashrc. Я использую приглашение следующего вида: PS1="\[\033[1;34;40m[\033[1;31;40m\u@\h:\w\033[1;34;40m]\033[1;37;40m $\033[0;37;0m\] " [ nico@ebrain:~ ] Свойства текста Как мы увидели раньше, '0' в начале последовательности обозначает установки для текста приглашения shell. Существуют следующие варианты: 0, 1, 22, 4, 24, 5, 25, 7, 27 со следующими значениями: "по умолчанию", "выделенный", "не выделенный", "с подчеркиванием", "без подчеркивания", "мерцающий", "не мерцающий", "инвертированный", "не инвертированный". С помощью следующего небольшого скрипта мы можем посмотреть на различные комбинации. #!/bin/sh ############################################################ # Nico Golde Homepage: http://www.ngolde.de # Last change: Mon Feb 16 16:24:41 CET 2004 ############################################################ for attr in 0 1 4 5 7 ; do echo "----------------------------------------------------------------" printf "ESC[%s;Foreground;Background - \n" $attr for fore in 30 31 32 33 34 35 36 37; do for back in 40 41 42 43 44 45 46 47; do printf '\033[%s;%s;%sm %02s;%02s ' $attr $fore $back $fore $back done printf '\n' done printf '\033[0m' done Вы можете загрузить этот скрипт tar.gz здесь: showansicol.tar.gz Еще одно приложение Возможность устанавливать цвета в shell'е можно использовать для написания консольных приложений. Для использования цвета в приложениях необходимо использовать такие библиотеки как slang или ncurses, что увеличит размер исполняемого файла. Библиотека Ncurses имеет преимущество независимости от типа используемого терминала. Примеры на C Приложение 'Hello World' зеленым цветом: #include int main(void){ const char *const green = "\033[0;40;32m"; const char *const normal = "\033[0m"; printf("%sHello World%s\n", green, normal); return 0; } Еще одна полезная управляющая последовательность printf("\033[2J"), это замена system(clear), но без необходимости использования заголовочного файла unistd.h. Вот так printf("\033[1K") можно удалить строку. Примеры init-скриптов Если мы хотим получить цветное, хорошо читаемое подтверждение загрузки init скриптов, вместо '.' нам необходимо опять воспрользоваться упраляющими последовательностями. Вот отрывок из cron init script: #!/bin/sh # Start/stop the cron daemon. test -f /usr/sbin/cron || exit 0 case "$1" in start) echo -n "Starting periodic command scheduler: cron" start-stop-daemon --start --quiet --exec /usr/sbin/cron echo "." ;; Успешное начало cron будет показано точкой. Можно изменить немного команду echo используя управляющие последовательности: #!/bin/sh # Start/stop the cron daemon. test -f /usr/sbin/cron || exit 0 case "$1" in start) echo -n "Starting periodic command scheduler: cron" start-stop-daemon --start --quiet --exec /usr/sbin/cron echo "\[ \033[1;34;40m[ \033[1;32;40mOk \033[1;34;40m]\033[0m\]" ;; Обратная связь Замечания, ошибки и т.д. направляйте по адресу "nico at ngolde.de". Удачи... Страница отзывов У каждой заметки есть страница отзывов. На этой странице вы можете оставить свой комментарий или просмотреть комментарии других читателей talkback page <--, перейти к начальной странице выпуска Webpages maintained by the LinuxFocus Editor team ╘ Nico Golde, FDL LinuxFocus.org Translation information: de --> -- : Nico Golde de --> en: JЭrgen Pohl en --> ru: Пухляков Кирилл 2004-05-05, generated by lfparser version 2.43 ПЮГДЕКШ ЛЮЯКН НАКЕОХУ.ЙНМЖЕМРПЮР РНМХПНБЮМХЕ НЙНМ ЬРЮМЦЕМЖХПЙСКЭ ОАНЧК ЯБЮПНВМШИ ОНЯР ХГЛЕПХРЕКЭ РЕЛОЕПЮРПШ РЕОКНКЧЙЯ ОПНЛШБЙЮ ХМФЕЙРНП tognana ТЮПТНП ЙПСРНИ ЙНЛОЮМХЪ ЙНЛОКЕЙЯМШИ ЯЮИР ЙСОХРЭ ЬХПНЙНСЦНКЭМХЙ РПНЯРЭ ДНЯРЮБЙЮ shimadzu СОПЮБКЕМХЕ ЮПУЮМЦЕКЭЯЙ ЛЕРПНАНМД МЮПД ЯЙЮВЮРЭ АЕЯОКЮРМШИ ЙСОХРЭ МНФНБЙЮ pki МЮПЙНЛЮМХЪ РЕКЕТНММШИ ЮМЙЕРХПНБЮМХЕ УНКНДХКЭМШИ ЮЦПЕЦЮР ЯОЕЖНАСБЭ ГЮЙЮГ ЙПНР-95 ОПХАНП ЙПШЯЮ ОЕПЕБНДВЕЯЙХИ АЧПН ubiquam ОНЙПЮЯЙЮ ПВБ АЧЦЕКЭМШЕ ГСАМНИ ОПНРЕГ ЩКЕЙРПНЙЮЛХМ dimplex model plasma (sp9) ЙНЛОЮМХЪ ДНЛХМХЙЕ ДНЛЮЬМХИ НВЮЦ ГДНПНБЭЕ ЙСУНММШИ РЕУМХЙ ЙНЛОЮМХЪ ОЕРПНЙЮРПХДФ ЯЮМТЮЪМЯ ОПНЛШЬКЕММШИ ЮЙЙСЛСКЪРНП МЮОШКЕМХЕ ООС ТЕППНЛНКХАДЕМ ЩТХПМШИ ЮМРЕММЮ locus ЙСОХРЭ ЪИЖЕБЮПЙС ЩТХПМШИ ЮМРЕММЮ ГСАМНИ ОПНРЕГ ЯРПСЙРСПМШИ ЬРСЙЮРСПЙЮ БЮЙССЛМШИ СОЮЙНБНВМШИ МЮДОХЯЭ ЙПСФНЙ 1Я АЧДФЕРХПНБЮМХЕ РЕЯРНДЕКХРЕКЭ ЦЮГНМНЙНЯХКЙЮ dolmar БПЕЛЪ ЪПНЯКЮБКЭ ОПНЛШЬКЕМШИ ЮКЭОХМХГЛ МНВМНИ НВЙХ КЮЙ ЙПЮЯЙЮ ОПЕДНУПЮМХРЕКЭ ОЙЩ ЛМНЦНРЮПХТМШЕ ЩКЕЙРПНЯВЕРВХЙ ХГЦНРНБКЕМХЕ ОПЕГЕМРЮЖХЪ ЯКХЛЕМР КХТР ЦНПЪВХИ НАЕД КЕВЕМХЕ ОЮОХККНЛЮ ВХККЕПШ ПЮЯЯШКЙЮ ЮДПЕЯ ГСАМНИ АНКЭ БШРЪФЙЮ ЙПНМЮ ЙСОХРЭ tomb raider ДНЦНБНП ЯСППНЦЮРМШИ ЛЮРЭ ЯКНЕМШИ ХГДЕКХЕ ЩКЕЙРПНХМЯРПСЛЕМР ЛЕРЮАН ЙНПОНПЮРХБМШИ НАЯКСФХБЮМХЕ ОПНЦПЮЛЛЮ ЬХТПНБЮМХЕ АХНЩОХКЪЖХЪ ЩКЕЙРПН КЮАНПЮРНПХЪ УХЛВХЯРЙЮ ДНЯРЮБЙЮ УНКНДХКЭМШИ ЙЮЛЕПЮ raymond weil ЦЕПА НАКЮЯРЭ ЙНПОЮПЮРХБМШЕ ОПЮГДМХЙ ДПЕМЮФ ЙНМБЕИЕП АНКЕМ ЮКЙНЦНКХГЛНЛ ХМНЯРПЮММШИ ДНКЦ ЯБНИЯРБН ЙПЮЯЙЮ 5440.16 (ЙПШЬЙЮ) ДНЯРЮБЙЮ МНСРАСЙ mobihel ЙПЮЯЙЮ ЙСОКЪ ОПНХГБНДЯРБЕММШИ ЙНЛОКЕЙЯ datamax ЛХМХ ОЕЙЮПМЪ ДЕЬЕБШИ УНКНДХКЭМХЙ ЙСОХРЭ БХДЕНЙЮПРС ЯОЕЖНАСБЭ АЕГНОЕПЮЖХНММНЕ ОПЕПШБЮМХЕ АЕПЕЛЕММНЯРЭ ОПНУНДХРЭ НЯЛНРП ЦХМЕЙНКНЦ ЙПЮМНБШИ РЕКЕФЙЮ ЦНЯОХРЮКЭ ЛЩЬ ЙСОХРЭ ДФНИЯРХЙ ЬСЛНЙ ДЛХРПХИ БКЮДХЛХПНБХВ ЮЩПНАХЙЮ ЙНЛОЮМХЪ ОЕРПНЙЮРПХДФ ЯЕКХМ ДХНМ АХКЕР ДНЯРЮБЙЮ ЯСЬЮ МЮПД ЙНПНРЙХИ АЧПН ОЕПЕБНДВХЙ ЮЙПХКНБШИ ОПЪФЮ ЦПЮДХПМЪ БЕМРХКЪРНПМШЕ ЦПД УНКНДХКЭМШИ ЙЮЛЕПЮ ЙСОХРЭ ЙНМБЕПРЕП АХКЕР ЛУЮР ЙСОХРЭ ЛНАХКЭМХЙ ЯЕБЕПМШИ ЙНПНМЮ ЮЩПНЦПЮТХЪ ОПНЦПЕЯЯХПСЧЫХИ АКХГНПСЙНЯРЭ peg perego venezia ЙПЮЯЙЮ ПФЮБВХМЮ intex РПЮМЯОЕПЯНМЮКЭМШИ ОЯХУНКНЦХЪ ТКЧНПЕЯЖЕМРМШИ ЙПЮЯЙЮ ЖБЕР КЮЛХМЮРЮ ЙКЮЯЯ 32 ЯЦКЮГ РПЕУЛЕПМШИ ОПЕГЕМРЮЖХЪ АХКЕР ЛУЮР shell