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