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

Материал из Викиучебника — открытых книг для открытого мира
Содержимое удалено Содержимое добавлено
Нет описания правки
Строка 32: Строка 32:
\e[36m # Голубой цвет для символа
\e[36m # Голубой цвет для символа
\e[37m # Серый цвет для символа
\e[37m # Серый цвет для символа
\e[39m # Сбросить цвет символа к значению по умолчанию
\e[40m # Черный фон для литеры
\e[40m # Черный фон для литеры
\e[41m # Красный фон для литеры
\e[41m # Красный фон для литеры
Строка 40: Строка 41:
\e[46m # Голубой фон для литеры
\e[46m # Голубой фон для литеры
\e[47m # Серый фон для литеры
\e[47m # Серый фон для литеры
\e[49m # Сбросить фон литеры к значению по умолчанию
</source>
</source>
С полным списком управляющих последовательностей ANSI вы можете познакомиться на [[w:Управляющие последовательности ANSI|следующей странице]].

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

Версия от 06:53, 14 октября 2021

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


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

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

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

Символ \e начинает любую управляющую последовательность и называется Escape-символом. Вместо \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 с инверсией цветов (черный на голубом)

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

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

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

   \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

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