[LinuxFocus-icon]
<--  | Домой  | Карта  | Индекс  | Поиск

Новости | Архивы | Ссылки | Про LF
[an error occurred while processing this directive]
[Photo of the Author]
автор Nico Golde
<nico/at/ngolde.de>

Об авторе:

В настоящее время Nico является студентом. Уже несколько лет он серьезно увлекается Linux, еще он принимает участие в нескольких проектах Open Source.



Перевод на Русский:
Пухляков Кирилл <kirill(at)linuxfocus.org>

Содержание:

 

Добавление цвета в Shell -- использование кодов ANSI

ansi colors

Резюме:

На 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 <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". Удачи...  

Страница отзывов

У каждой заметки есть страница отзывов. На этой странице вы можете оставить свой комментарий или просмотреть комментарии других читателей
 talkback page 

<--, перейти к начальной странице выпуска

Webpages maintained by the LinuxFocus Editor team
© Nico Golde, FDL
LinuxFocus.org
Translation information:
de --> -- : Nico Golde <nico/at/ngolde.de>
de --> en: Jürgen Pohl <sept.sapins(at)verizon.net>
en --> ru: Пухляков Кирилл <kirill(at)linuxfocus.org>

2004-05-05, generated by lfparser version 2.43