Я могу изменить цвет через настройки, но как изменить цвет фона и цвет текста терминала через командную строку?
решение1
На некоторых терминалах, совместимых с 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'
сбросить все атрибуты:
решение2
Информация, найденная наэта страница, исключая столбец предварительного просмотра:
Последовательности состоят из символа Escape (часто представленного как « ^[
» или « <Esc>
»), за которым следуют некоторые другие символы: « ^[FCm
» (где FC
— одно из чисел в маркированном списке ниже).
В bash
коде Escможет быть одно из следующих значений:
\e
\033
(восьмеричное)\x1B
(шестнадцатеричный)
Примечание 1:Последовательность " \e[0m
" удаляет все атрибуты (форматирование и цвета). Может быть хорошей идеей добавить ее в конце каждого цветного текста.
Заметка 2:Цвета переднего плана и фона могут различаться в зависимости от конфигурации терминала ине все цвета поддерживаются.
Установить/Сбросить
0
: Сбросить/удалить все атрибуты модификатора, переднего плана и фона:echo -e "\e[0mNormal Text"
1
: Жирный/Яркий:echo -e "Normal \e[1mBold"
2
: Дим:echo -e "Normal \e[2mDim"
4
: Подчеркнуто:echo -e "Normal \e[4mUnderlined"
5
: Мигание (не работает в большинстве терминалов, кроме 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
: Сброс/удаление dim: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
: Голубой37
: Светло-серый90
: Темно-серый91
: Светло-красный92
: Светло-зеленый93
: Светло-желтого94
: Светло-синий95
: Светло-пурпурный/розовый96
: Светло-голубой97
: Белый
Фон
49
: Цвет фона по умолчанию (обычно черный или синий)40
: Черный41
: Красный42
: Зеленый43
: Желтый44
: Синий45
: Пурпурный/фиолетовый46
: Голубой47
: Светло-серый (не использовать с белым передним планом)100
: Темно-серый (не использовать с черным передним планом)101
: Светло-красный102
: Светло-зеленый (не использовать с белым передним планом)103
: Светло-желтый (не использовать с белым передним планом)104
: Светло-голубой (не использовать со светло-желтым передним планом)105
: Светло-пурпурный/розовый (не использовать со светлым передним планом)106
: Светло-голубой (не использовать с белым передним планом)107
: Белый (не использовать со светлым передним планом)
Чтобы задать цвета переднего плана и фона одновременно, используйте форму echo -e "\e[S;FG;BGm"
. Например: echo -e "\e[1;97;41m"
(жирный белый передний план на красном фоне)
256 вариантов цвета см. на исходной странице.
решение3
Изменение цветов по мере необходимости
Если предполагается изменение цвета по случайному принципу:
Вы можете использовать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
решение4
Различные цветовые коды, которые используются для получения цветного вывода, также могут быть использованы для полученияцветные фоны:
40 black
41 red
42 green
43 yellow
44 blue
45 magenta
46 cyan
47 white
Поэтому следующая команда сделает мой фон красным:
$ echo -e '\e[0;41m'
В зависимости от оболочки, эмулятора терминала и т. д. вам может не понадобиться -e
.