Изменить цвет строки приглашения linux

Обновлено: 07.07.2024

Вид приглашения командной строки Bash определяется переменной PS1 . Его можно просмотреть как любую другую переменную окружения:

Как изменить приглашение (только для данной сессии)

Можно установить переменную PS1 только для текущей сессии в терминале. Это удобно, пока вы подбираете, как будет выглядеть строка приглашения. Чтобы это сделать нужно выполнить команду export для переменной PS1 , например:

После выполнения команды строка приглашения в терминале сразу изменится.

Как изменить приглашение на постоянной основе

Новое значение переменной PS1 прописывается в файле .bashrc , который расположен в вашей домашней директории (файл может отсутствовать).

Откроем файл .bashrc в редакторе nano для редактирования. Для этого в терминале выполним команду:

Перейдем в конец файла и добавим новую строку, в которой пропишем значение переменной PS1 . Например:

Сохраним изменения и закроем файл. Для этого нажмите Ctrl+X, затем Y и Enter, чтобы сохранить изменения.

Теперь выполним команду source, чтобы наши изменения вступили в силу:

Перезапустите терминал. Приглашение для ввода команд будет обновлено.

Как изменить цвета в строке приглашения

Элементы строки приглашения можно раскрашивать в разные цвета.

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

Используется следующий синтаксис:

e[ - начало цветовой схемы. X;Ym — цветовая пара (X;Y). Именно значения X и Y определяют цвет. e[m — окончание цветовой схемы.

Небольшой пример, чтобы вы понимали о чем идет речь. Раскрасим всю строку целиком цветом с обозначением 0;36 .

Цвета задаются числами. Можно задавать парой X;Y или просто Y. Например, красный это — 0;31 или просто 31. Есть и другие способы задания цветов, но в данной статье мы их не рассматриваем.

Список цифровых обозначений для цветов (Y):

Цвет Числовое обозначение
Black 30
Red 31
Green 32
Brown 33
Blue 34
Purple 35
Cyan 36
Light gray 37
Dark gray 90
Light red 91
Light green 92
Light yellow 93
Light blue 94
Light magenta 95
Light cyan 96
White 97

При задании цвета двумя числами X;Y, первое число X принимает следующие значения:

Примеры

Простой вывод текущего пользователя и полного пути:

Такойже вывод, но с подстветкой:

Список возможных настроек приглашения

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

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

Одно из главных преимуществ Linux заключается в том, что при желании в нём можно настроить всё, что угодно. В этом и выражается преимущество проективных систем, над процедурными. Фактически, это конструктор, состоящий из отдельных блоков, каждый из которых можно настроить по своему желанию.

Особенно интересно, если не просто копируешь чужой "рецепт", а пытаешься разобраться, что и как устроено. И даже решая несерьезную задачу, узнаешь что-то новое.

Раскрашиваем цвета вывода ls

Как-то захотелось мне настроить цвета терминала linux в выводе команды ls. Ну не нравился блекло-фиолетовый цвет для каталогов в Linux Mint. Начал разбираться.

Из документации к ls, выяснил, что установка цветов для вывода осуществляется при помощи утилиты dircolors, которая либо устанавливает параметры цвета из своей собственной базы, либо берет их из файла

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

/.bashrc, файл с настройками командной оболочки, а сами параметры определяются через переменную LC_COLORS.

Действительно, в .bashrc обнаружился скрипт следующего содержания:


Его суть сводится к проверке на наличие утилиты dircolors в системе, присваивания значения переменной и, при удачном выполнении, использовании параметра --color=auto при каждом вызове ls.

Если запустить утилиту dircolors, она выводит значение переменной LC_COLOR.


Также возможен вывод значения переменной LC_COLORS в структурированном виде, указанием ключа:

Поскольку вывод получается длинный, приводить его не буду.

/.dircolors, то будет создан структурированный файл, из которого и будут браться настройки цветов. Редактируя данный файл и устанавливаются настройки цвета для вывода ls.

В созданном файле .dircolors есть подсказка:


Устанавливая последовательность через точку с запятой и получаем нужный нам цвет в консоли linux, согласно перечисленным. Цвета терминала linux от 30 до 37 для цвета шрифта, а с 40 до 47 для фона. К примеру:

DIR 01;34 подразумевает, что имена директорий будут выделяться жирным шрифтом и синим цветом.

Но таким способом получается всего восемь цветов, а современные эмуляторы терминала способны выводить как минимум 256! Выяснилось, что существуют и другие способы установки цвета. К примеру, значение EXEC 38;5;208;1 - даёт оранжевый толстый шрифт у исполняемых файлов.

Чтобы не перебирать цвета linux вручную, есть уже готовая таблица цветов:


Подставляя в значение цвета 38;5;x - где x цвет из таблицы, получаем необходимый результат. Получается что-то вроде этого:


Но как это работает? Дело в том, что установка цвета вывода информации в эмуляторе терминала осуществляется при помощи ANSI escape-кодов. Это определенная последовательность символов, которая не выводится на экран, однако влияет на вывод. Называется она так, поскольку начинается с \033[ - кода "Esc". Поскольку терминалов и эмуляторов терминалов существует множество, эти управляющие коды стандартизированы. Управлением цветом через последовательность от 30 до 37 - это стандарт ECMA-48. Информация о нем содержится в разделе console_codes. А управление через 38;5;* - определено стандартом T.416. Более подробная информация есть, конечно же, в Википедии.

Раскрашиваем и изменяем строку приглашения:

Разобравшись, как устанавливать цвета linux через esc-коды, не составит труда переделать и раскрасить строку приглашения. За ее вывод отвечает переменная PS1, которая определена в файле

В Linux Mint скрипт ее инициализации имеет следующий вид:


То-есть сперва определяется, запустил ли скрипт root или обычный пользователь. Поскольку в подавляющем большинстве случаев имеет место именно второй вариант, то и редактировать нужно строку, следующую после первого 'else'. Формат строки расшифрован в документации по баш, в разделе "Promting". Из него следует, что esc-последовательность должна начинаться с "\[" и заканчиваться "\]". Таким образом:

  • [\033[01;32m\] - устанавливает зеленый цвет;
  • \u - выводит имя пользователя;
  • \h - выводит имя хоста;
  • [\033[00m\] - очищает установленные атрибуты;
  • [\033[01;34m\] - устанавливает синий цвет;
  • \w - выводит имя рабочей директории;
  • Привет! - пример того, что может быть выведен любой производный текст.

Что ещё можно вывести в строке приглашения:

  • \d - дату, в формате "Wed Dec 28";
  • \A - время в 24-часовом формате;
  • \! - номер текущей команды в истории;
  • \n - перенос вывода на другую строку;

Введем что нибудь поинтереснее:

И строка приглашения примет вид:


Так, не понял, а откуда взялась ёлка-то?

Ну ладно, на самом деле, если в конец .bashrc вставить echo -e "С Новым годом", то поздравление будет выводиться при каждом запуске терминала перед приглашением ввода. Соответственно, вывод можно раскрашивать каким угодно способом. А там уж и ёлку нарисовать не сложно.

В большинстве терминалов для Linux доступен некоторый набор цветов, которые вы можете использовать для стилизации строки приглашения или любого другого текста. В терминале можно задать не только цвет текста, но и цвет фона, а также применить форматирование. Чтобы задать цвет для строки приглашения, необходимо изменить значение переменной PS1 задав в ней специальный цветовой код для того текста, который хотим раскрасить. Подробнее о строке приглашения вы можете узнать из этой статьи.

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

  • 8 цветов - для 3 битной версии управляющих символов ANSI, поддерживается почти всеми терминалами.
  • 16 цветов - для 4 битной версии управляющих символов ANSI, поддерживается почти всеми терминалами.
  • 88 цветов - для 7 битной версии управляющих символов ANSI, поддерживается многими современными терминалами.
  • 256 цветов - для 8 битной версии управляющих символов ANSI, поддерживается многими современными терминалами.
  • 16777216 цветов - для 24 битной версии управляющих символов ANSI, поддерживается только терминалами в современных графических оболочках.

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

Установить цвет для текста, цвет фона и форматирование можно, как минимум, двумя способами: с помощью управляющих символов или с помощью команды tput . Оба варианта подробно рассмотрены далее по тексту.

Изменение цвета текста в терминале с помощью управляющих символов (8/16 цветов)

Цвет в терминалах задается с помощью специальных управляющих символов:

  • \e[ - начало форматирования текста.
  • x;y;zm - код цвета (x = код форматирования, y = код цвета текста, z = код цвета фона). Порядок следования x,y и z не имеет значения, т.к. код определяется по числовому значению, а не по его положению.
  • \e[m - конец форматирования текста (необязателен, нужен для сброса форматирования).

Для примера раскрасим строку приглашения, которая имеет вид - PS1="\u@\h:\w\n\$ " . Зададим яркий фиолетовый цвет (код 95) для имени пользователя и хоста, а также яркий зеленый цвет (код 92) для строки каталога. Текст, который мы хотим раскрасить, нужно поместить между управляющими последовательностями символов \e[x;y;zm и \e[m . Тип форматирования и цвет фона задавать не обязательно, в этом случае они будут установлены по умолчанию.

Иногда использование непечатных символов таких как \e может привести к некорректному поведению строки приглашения, особенно при пролистывании истории команд кнопкой вверх. В связи с этим крайне рекомендуется экранированить все непечатные символы с помощью - \[ \] .

Результат будет следующим.

Изменение цвета текста для строки приглашения в терминале Bash

Изменение цвета текста для строки приглашения в терминале Bash

В представленной ниже таблице вы можете узнать коды доступных цветов для форматирования текста в терминале.

Цвет Обычный Яркий Фон Яркий фон
Black 30 90 40 100
Red 31 91 41 101
Green 32 92 42 102
Brown / Yellow 33 93 43 103
Blue 34 94 44 104
Magenta 35 95 45 105
Cyan 36 96 46 106
White (light gray) 37 97 47 107
Default color 39 49

Также таблица вариантов изменения форматирования текста.

Тип форматирования текста Код
полная очистка форматирования 0
жирный/яркий текст 1
затемненный цвет теста 2
наклонный текст 3
подчеркнутый текст 4
медленно мерцающий текст 5
быстро мерцающий текст 6
обратить цвет текста в цвет фона 7
спрятанный текст (для паролей) 8
зачеркнутый текст 9
очистка жирности/яркости текста 21
очистка затемнения текста 22
очистка наклона текста 23
очистка подчеркивания текста 24
очистка мерцания текста 25
очистка мерцания текста 26
очистка фона 27
очистка скрытия текста 28
очистка зачеркивания текста 29

Некоторые терминалы не поддерживают различные типы форматирования.

Если вам нужно несколько вариантов форматирования, например жирный, наклонный и подчеркнутый текст одновременно, то вы можете указать несколько кодов форматирования через знак - ; , например - \e[1;3;4;33;44mTEXT\e[0m

Для полноты картины рассмотрим несколько примеров стилизации строки приглашения.

Различные стили форматирования строки приглашения в терминале Bash

Форматирования строки приглашения в терминале Bash c использованием палитры в 16 цветов

В конце статьи вы можете ознакомиться с Bash-скриптом, который наглядно покажет как форматирование поддерживается в вашем терминале.

Изменение цвета текста в терминале с помощью управляющих символов (88/256 цветов)

Для терминалов с поддержкой 88/256 цветов используются следующий порядок управляющих символов:

  • \e[ - начало форматирования текста.
  • w;x;y;zm - код цвета (w = коды форматирования, x = что форматируем текст (код 38) или фон (код 48), y = 5, z = код цвета от 0 до 255). В данном случае важно соблюдать порядок следования для w, x, y и z.
  • \e[m - конец форматирования текста (необязателен, нужен для сброса форматирования).

Чтобы для одного и того же текста одновременно задать цвет и фон нужно еще раз указать соответствующую последовательность кодов, например - \e[38;5;124;48;5;20mTEXT\e[0m

Примеры изменения цвета для строки приветствия могут выглядеть следующим образом.

Форматирование строки приглашения в терминале bash c использованием палитры в 256 цветов

Форматирование строки приглашения в терминале Bash c использованием палитры в 256 цветов

В последнем разделе вы найдете Bash-скрипт, который выведет карту всех 256 цветов в терминале, чтобы вам было удобней определиться с выбором.

Изменение цвета текста в терминале с помощью управляющих символов (16777216 цветов)

Терминалы с поддержкой 24-битной версии управляющих символов ANSI, способны выводить почти полный спектр видимых человеком цветов в формате RGB.

Здесь также как и в двух предыдущих вариантах используются управляющие символы. Только теперь для каждого цвета (красный, зеленый, синий) выделяется по одному байту, т.е. для каждого цвета вы можете задать промежуток от 0 до 255.

  • \e[ - начало форматирования текста.
  • w;x;y;z1,z2,z3m - код цвета (w = коды форматирования, x = что форматируем текст (код 38) или фон (код 48), y = 2, z1 = RED(0-255), z2 = GREEN(0-255), z3= BLUE(0-255)). В данном случае важно соблюдать порядок следования для w, x, y и z1, z2, z3.
  • \e[m - конец форматирования текста (необязателен, нужен для сброса форматирования).

Если вы не используете какой либо из цветов, то его можно не писать, но место под него должно остаться, например чисто синий цвет - \e[1;38;2;;;255m

Несколько примеров использования RGB формата.

Форматирование строки приветствия в CentOS с помощью цветовой модели RGB

Форматирование строки приветствия в CentOS с помощью цветовой модели RGB

Сохранение цветового кода в переменных

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

Сохранить цвет в переменную можно следующим образом.

Теперь подставим переменные внутрь PS1 .

Применение переменных для хранения цветового кода

Применение переменных для хранения цветового кода

Изменение цвета текста в терминале с помощью команды tput

Цвет можно также задать с помощью команды tput , которая будет подставлять всё те же управляющие символы.

tput setaf 1 - установка цвета текста
tput setab 1 - установка цвета фона
tput sgr0 - очистка форматирования

Пример использования команды tput .

Использование команды tput для форматирования строки приглашения

Использование команды tput для форматирования строки приглашения

Коды доступных цветов представлены в таблице ниже.

Цвет Black Red Green Yellow Blue Magenta Cyan White
Код 0 1 2 3 4 5 6 7

С помощью tput можно также задавать стили форматирования.

Команда tput имеет множество возможностей по управлению текстом и терминалом в целом. Подробнее об этой команде вы можете узнать на справочных страницах.

Как сохранить отформатированную строку приглашения

В этой статье мы подробно рассмотрели все варианты установки цветов для текста в терминале Linux. Чтобы сохранить раскрашенную строку приветствия, то вставьте нужное значение переменной PS1 в конец файла

Вы также можете сохранить строку приветствия раскрашенную в градиенте. Для этого вставьте следующий код в файл

/.bashrc , измените в нем значение переменной clr , на номер из палитры 256 цветов, с которого хотите начать градиент.

Приглашение в командной среде bash изменяется при помощи изменения переменных PS1, PS2, PS3, PS4 и PROMPT_COMMAND.

  • PS1 - переменная, которая задает вид строки приглашения командной строки, которое bash выводит, когда ожидает ввода очередной команды пользователем.
  • PS2 - переменная, отвечающая за вторичный тип приглашения ввода.
  • PS3 - третичное приглашение, выводится тогда, когда пользователь должен сделать выбор в операторе select.
  • PS4 - приглашение четвертого уровня, выводится при отладки сценариев (скриптов) в начале каждой строки перед командой перед исполняющейся командой.
  • PROMPT_COMMAND - содержимое этой переменной выполняется перед каждой строкой приглашения.

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

Вывод будет примерно следующим:

Для изменения переменной можно пользоваться командой export . Например:

Изменит приглашение на такое:

Другим методом изменения данных переменных является задание из в конце файла

/.bashrc . Это делается таким образом:

Задание параметров приглашения командной оболочки производится при помощи задания управляющих последовательностей:

Изменение цвета строки приглашения:
Изменение цвета строки приглашения командной оболочки делается при помощи последовательности

Номера свойств текста:

Свойство Код
Значение по умолчанию 0
Повышенная яркость 1
Пониженная яркость 2
Подчеркнутый 4
Нормальная яркость 5
Инвертированный 7
Скрытый 8

Цвет Текст Фон
Черный 30 40
Красный 31 41
Зеленый 32 42
Желтый 33 43
Синий 34 44
Фиолетовый 35 45
Голубой 36 46
Белый 37 47

Например такая последовательность:

Настроит строку приглашения следующим образом:


Как видно из примера управляющая последовательность изменяет свойства всего текста после неё и до другой последовательности.
Таким же образом устанавливается цвет фона и текста, но параметры дублированы. Первые два для фона, вторые - для текста:

Переменная PS2 :
Содержимое переменной PS2 появляется на экране терминала при переносе ввода команды на следующую строку. Например:


Метод изменения переменных одинаков, не будем останавливаться на каждой отдельно.
Переменная PS3 : Этот вид приглашения используется в скриптах, когда нужно сделать выбор при использовании оператора select.
Переменная PROMPT_COMMAND : Эта переменная используется для помещения какого либо выражения перед каждой строкой приглашения терминала:
Например если поместить в неё команду ls :

То перед каждой строкой приглашения выведется список файлов текущей папки:

Читайте также: