Практическое написание сценариев командной оболочки Bash/Приложения: различия между версиями

Материал из Викиучебника — открытых книг для открытого мира
Содержимое удалено Содержимое добавлено
Нет описания правки
Нет описания правки
Строка 57: Строка 57:
# Выведет Test text с инверсией цветов (черный на голубом)
# Выведет Test text с инверсией цветов (черный на голубом)
</source>
</source>
Вы можете обойтись одним Escape-символом, если будете перечислять коды через точку с запятой. Коды будут применяться именно в том порядке, в котором следуют.
Вы можете обойтись одним CSI, если будете перечислять коды через точку с запятой. Коды будут применяться именно в том порядке, в котором следуют.
<source lang=bash>
<source lang=bash>
echo -e "\e[33;42;1mTest text\e[0m Text after"
echo -e "\e[33;42;1mTest text\e[0m Text after"

Версия от 07:48, 14 октября 2021

← Код-сниппеты Глава
Приложения


Получение цветовой схемы терминала

В некоторых примерах книги мы использовали специальные управляющие последовательности, которые подкрашивали вывод. Эти управляющие последовательности используют следующий принцип:

\e[##m

где вместо ## нужно подставить определенные коды, отвечающие за отображение.

Символы \e и [ начинают любую управляющую последовательность, а сама пара называется CSI (от Control Sequence Introducer). Вместо \e допустимо записывать \033, т.е.

\033[##m

однако так запись кажется не такой опрятной.

Следующие коды отвечают за отображение любого текста, следующего за ними:

   \e[0m        # Сброс отображения к значению по умолчанию
   \e[1m        # Полужирное начертание
   \e[2m        # Приглушенный цвет
   \e[4m        # Яркий цвет
   \e[5m        # Мигание
   \e[7m        # Инвертирует фон литеры с ее цветом, например белый цвет на черном фоне инвертируется в черный цвет на белом фоне
   \e[22m       # Установить нормальную интенсивность
   \e[24m       # Убрать подчеркивание
   \e[25m       # Убрать мигание
   \e[27m       # Отменить реверсивное начертание
   \e[30m       # Черный цвет для символа
   \e[31m       # Красный цвет для символа
   \e[32m       # Зеленый цвет для символа
   \e[33m       # Желтый цвет для символа
   \e[34m       # Синий цвет для символа
   \e[35m       # Фиолетовый цвет для символа
   \e[36m       # Голубой цвет для символа
   \e[37m       # Серый цвет для символа
   \e[39m       # Сбросить цвет символа к значению по умолчанию
   \e[40m       # Черный фон для символа
   \e[41m       # Красный фон для символа
   \e[42m       # Зеленый фон для символа
   \e[43m       # Желтый фон для символа
   \e[44m       # Синий фон для символа
   \e[45m       # Фиолетовый фон для символа
   \e[46m       # Голубой фон для символа
   \e[47m       # Серый фон для символа
   \e[49m       # Сбросить фон символа к значению по умолчанию

С полным списком управляющих последовательностей ANSI вы можете познакомиться на следующей странице.

Вы можете в любой момент поэкспериментировать с управляющими последовательностями, например так

echo -e "\e[7mTest text\e[0m Text after"
# Выведет Test text с инверсией цветов (черный на белом)

# За один раз можно использовать несколько последовательностей
echo -e "\e[7m\e[36mTest text\e[0m Text after"
# Выведет Test text с инверсией цветов (черный на голубом)

Вы можете обойтись одним CSI, если будете перечислять коды через точку с запятой. Коды будут применяться именно в том порядке, в котором следуют.

echo -e "\e[33;42;1mTest text\e[0m Text after"
# Выведет полужирный (1) желтый цвет (33) на зеленом фоне (42).

Некоторые коды номинально существуют, но могут не поддерживаться конкретно в вашем терминале. Для тестирования управляющих последовательностей, отвечающих за отображение, мы рекомендуем использовать следующий проверочный цикл.

echo
for x in 0 1 4 5 7 8; do
    for i in $(seq 30 37); do
        for a in $(seq 40 47); do
            echo -ne "\e[$x;$i;$a""m\\\e[$x;$i;$a""m\e[0;37;40m "
        done; echo
    done
done
echo
Пример интерпретации управляющих последовательностей в эмуляторе терминала xterm

Современные эмуляторы терминала гораздо продвинутые в плане отображения цветов. В большинстве случаев они поддерживают специальные четырех числовые коды:

   \e[0;48;5;NNNm    # для инвертированного цвета
   \e[0;38;5;NNNm    # для нормального цвета

# где вместо NNN нужно использовать код от 0 до 255. Например, \e[0;48;5;16m это инверсия (белый на черном).

# Сброс осуществляется все тем же \e[0m.

Благодаря такому большому диапазону кодов, достигается большое количество цветовых оттенков. Проверочный код для расширенного набора цветов представлен ниже.

echo  
for i in $(seq 0 255); do
    printf "\e[0;48;5;${i}m %03d\e[0;38;5;${i}m %03d " $i $i
    [[ $i -eq 7 || $i -eq 15 || $i -eq 231 || $i -eq 239 || $i -eq 247 ]] && echo
    [[ $i -ge 15 && $i -le 231 && $(( ($i - 15) % 6 )) -eq 0 ]] && echo
done
echo
Пример интерпретации управляющих последовательностей в эмуляторе терминала xterm

← Код-сниппеты