| ![[Photo of the Author]](../../common/images2/NicoGolde.jpg)  автор  Nico Golde
 <nico/at/ngolde.de>
 
 Об авторе:
 
 В настоящее время Nico является студентом. Уже несколько лет он
	серьезно увлекается Linux, еще он принимает участие в нескольких проектах
	Open Source. 
 Перевод на Русский:
 Пухляков Кирилл <kirill(at)linuxfocus.org>
 
 Содержание:
 | 
 
| Добавление цвета в 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\$ \]"
    Приглашение будет выведено зеленым цветом: 
    
      
    
    
	Управляющая последовательность начинается с \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\]"
    
    Получается цветное приглашение:
    
      
    
    
	Протестировать эту настройку можно набрав 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\] "
    
    
      
    
     
Свойства текста
	Как мы увидели раньше, '0' в начале последовательности обозначает
	установки для текста приглашения shell. Существуют следующие варианты:
    0, 1, 22, 4, 24, 5, 25, 7, 27 со следующими значениями: "по умолчанию",
	"выделенный", "не выделенный", "с подчеркиванием", "без подчеркивания",
	"мерцающий", "не мерцающий", "инвертированный", "не инвертированный".
    
	С помощью следующего небольшого скрипта мы можем посмотреть на различные
	комбинации.
#!/bin/sh
############################################################
# Nico Golde <nico(at)ngolde.de> 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 <stdio.h>
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".
	Удачи...
  
 
Страница отзывов
У каждой заметки есть страница отзывов. На этой странице вы можете оставить 
свой комментарий или просмотреть комментарии других читателей 
<--, перейти к начальной странице выпуска 
2004-05-05, generated by lfparser version 2.43