Изменение цвета текста и фона терминала?

46

Я могу изменить цвет с помощью предпочтений, но как изменить цвет фона и цвет текста терминала через командную строку?     

задан TechJhola 09.12.2014 в 06:11
источник

4 ответа

30

На некоторых терминалах, совместимых с XTerm / ANSI (например, xterm и gnome-terminal ), вы можете устанавливать цвета, используя палитру, большую, чем палитра 8/16 цветов по умолчанию (например, с использованием 88-цветных, 256- цветов или палитры 16777216 цветов (RGB), и xterm и gnome-terminal поддерживают как 256 цветов, так и палитру 16777216 цветов (RGB); что оболочка может переопределить это (например, для zsh ).

Вот сценарий для отображения цветов в палитре с 256 цветами и их цветового кода ANSI на терминалах XTerm / ANSI с поддержкой 256-цветной палитры:

#!/bin/bash
for((i=16; i<256; i++)); do
    printf "\e[48;5;${i}m%03d" $i;
    printf '\e[0m';
    [ ! $((($i - 15) % 6)) -eq 0 ] && printf ' ' || printf '\n'
done

В зависимости от того, хотите ли вы применить цвет к переднему или второстепенному, используйте значение <fg_bg> 38 или 48 (соответственно) в следующей команде:

printf '\e[<fg_bg>;5;<ANSI_color_code>m'

Например, чтобы установить цвет переднего плана ( <fg_bg> = 38 ) на красный ( <ANSI_color_code> = 196 ) и цвет фона ( <fg_bg> = 48 ) на черный ( <ANSI_color_code> = 0 ):

printf '\e[38;5;196m Foreground color: red\n'
printf '\e[48;5;0m Background color: black\n'

Необходимо перерисовать приглашение с помощью printf '\e[K' , чтобы цвет фона применим к всей строке и для того, чтобы цвет переднего плана применим к курсору:

То же самое можно сделать, используя значения RGB вместо цветовых кодов ANSI в совместимом терминале; в зависимости от того, хотите ли вы применить цвет на переднем плане или на задний план, используйте <fg_bg> значение 38 или 48 (соответственно) в следующей команде:

printf '\e[<fg_bg>;2;<R>;<G>;<B>m'

Например, чтобы установить цвет переднего плана ( <fg_bg> = 38 ) на красный ( <R> = 255 , <G> = 0 , <B> = 0 ) и фон ( <fg_bg> = 48 ) до черного ( <R> = 0 , <G> = 0 , <B> = 0 ):

printf '\e[38;2;255;0;0m Foreground color: red\n'
printf '\e[48;2;0;0;0m Background color: black\n'

Опять же, необходимо перерисовать приглашение, используя printf '\e[K' , чтобы цвет фона применим к всей строке и для того, чтобы цвет переднего плана применим к курсору:

Используя оба метода, вы можете использовать printf '\e[0m' для сброса всех атрибутов:

    

ответ дан kos 05.10.2015 в 14:00
26

Измените цвета на случайном основании

Если это предназначено для изменения цветов на случайном основании :

Вы можете использовать команду setterm :

setterm -term linux -back <background_colour> -fore <text_color> -clear

из цветов, вы можете выбрать (как для фонового, так и для фонового):

black|blue|green|cyan|red|magenta|yellow|white|default

для дополнительных параметров:

setterm -help

Измените настройки своего профиля (цвета)

В 14.04 я не нашел возможность использовать dconf для установки цветов или терминала. Однако вы можете использовать gconftool

  • Сначала вам нужно получить свое имя профиля:

    gconftool-2 --get /apps/gnome-terminal/global/profile_list
    
  • Затем, чтобы задать цвет текста вашего профиля:

    gconftool-2 --set "/apps/gnome-terminal/profiles/<profile_name>/foreground_color" --type string "#FFFFFF"
    

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

    То же самое с цветом фона:

    gconftool-2 --set "/apps/gnome-terminal/profiles/<profile_name>/background_color" --type string "#000000"
    

    , например, чтобы установить цвет фона в черный

В качестве альтернативы, чтобы установить имя цвета (ов), вы можете просто использовать white или green , из той же палитры, что и команда setterm, например:

gconftool-2 --set "/apps/gnome-terminal/profiles/<profile_name>/background_color" --type string black
    
ответ дан Jacob Vlijm 09.12.2014 в 07:50
20

Информация, найденная на этой странице , исключая столбец предварительного просмотра:

Последовательности состоят из символа Escape (часто представленного « ^[ » или « <Esc> »), за которым следуют некоторые другие символы: « <Esc>[FCm » (где FC - это одно из чисел в маркированном список ниже).

В bash код Esc может быть одним из следующих:

  1. \e
  2. 3 (восьмеричный)
  3. \x1B (шестнадцатеричный)

Примечание 1: Последовательность « \e[0m » удаляет все атрибуты (форматирование и цвета). Это может быть хорошей идеей добавить его в конце каждого цветного текста.

Примечание 2: Цвета переднего плана и фона могут отличаться в зависимости от конфигурации терминала и не все цвета поддерживаются .

Set / Reset

  • 0 : Сбросить / удалить все атрибуты модификатора, переднего плана и фона: echo -e "\e[0mNormal Text"
  • 1 : Жирный / Яркий: echo -e "Normal \e[1mBold"
  • 2 : Dim: echo -e "Normal \e[2mDim"
  • 4 : Подчеркнуто: echo -e "Normal \e[4mUnderlined"
  • 5 : Blink (не работает в большинстве терминалов, кроме XTerm): echo -e "Normal \e[5mBlink"
  • 7 : Обратное / Инверсное: echo -e "Normal \e[7minverted"
  • 8 : Скрыто (полезно для конфиденциальной информации): echo -e "Normal \e[8mHidden Input"
  • 21 : Сброс / Удалить полужирный / яркий: echo -e "Normal \e[1mBold \e[21mNormal"
  • 22 : Сброс / Удалить тусклый: echo -e "Normal \e[2mDim \e[22mNormal"
  • 24 : Сброс / удаление подчеркивания: echo -e "Normal \e[4mUnderlined \e[24mNormal"
  • 25 : Сброс / удаление мерцания: echo -e "Normal \e[5mBlink \e[25mNormal"
  • 27 : Сброс / удаление обратного / инвертирования: echo -e "Normal \e[7minverted \e[27mNormal"
  • 28 : Сброс / удаление скрытых: echo -e "Normal \e[8mHidden \e[28mNormal"

Передний план

  • 39 : По умолчанию (обычно зеленый, белый или светло-серый): echo -e "Default \e[39mDefault"
  • 30 : черный: echo -e "Default \e[30mBlack" (лучше всего сочетается с цветом фона: echo -e "Default \e[30;107mBlack on white" )
  • 31 : красный (не использовать с зеленым фоном)
  • 32 : зеленый
  • 33 : желтый
  • 34 : синий
  • 35 : пурпурный / фиолетовый
  • 36 : Cyan
  • 37 : Светло-серый
  • 90 : Темно-серый
  • 91 : светло-красный
  • 92 : светло-зеленый
  • 93 : светло-желтый
  • 94 : Голубой
  • 95 : Светло-пурпурный / розовый
  • 96 : Light Cyan
  • 97 : Белый

Фон

  • 49 : цвет фона по умолчанию (обычно черный или синий)
  • 40 : черный
  • 41 : Красный
  • 42 : зеленый
  • 43 : желтый
  • 44 : синий
  • 45 : пурпурный / фиолетовый
  • 46 : Cyan
  • 47 : Светло-серый (не использовать с белым фоном)
  • 100 : темно-серый (не использовать с черным передним планом)
  • 101 : светло-красный
  • 102 : светло-зеленый (не использовать с белым фоном)
  • 103 : светло-желтый (не использовать с белым фоном)
  • 104 : Голубой (не использовать со светлым желтым передним планом)
  • 105 : Светло-пурпурный / розовый (не использовать со светом переднего плана)
  • 106 : светлый голубой (не использовать с белым фоном)
  • 107 : белый (не использовать со светом переднего плана)

Чтобы одновременно установить цвета переднего и заднего фона, используйте форму the echo -e "\e[S;FG;BGm" . Например: echo -e "\e[1;97;41m" (полужирный белый передний план на красном фоне)

Для 256 параметров цвета см. страницу источника.

    
ответ дан Agi Hammerthief 09.12.2014 в 14:43
5

Различные цветовые коды, используемые для получения цветного выхода, также могут использоваться для получения цветные фоны :

40  black
41  red
42  green
43  yellow
44  blue
45  magenta
46  cyan
47  white

Следовательно, следующая команда превращает мой фон в красный цвет:

$ echo -e '\e[0;41m'

В зависимости от оболочки, эмулятора терминала и т. д. вам может не понадобиться -e .

    
ответ дан muru 09.12.2014 в 08:17