Как сделать приглашение командной строки Bash разноцветным
В большинстве дистрибутивов приглашение командной строки Bash по умолчанию того же цвета, что и вводимые команды и текст вывода этих команд. При интенсивной работе в консоли, когда вводится множество команд подряд, бывает трудно сразу увидеть, где оканчивается вывод одной команды и начинается ввод другой, особенно если вывод команд большой. К счастью, Bash позволяет выделить приглашение цветом.
Вид приглашения командной строки Bash определяется переменной PS1. Его можно просмотреть как любую другую переменную окружения:
Сравнив вывод команды [\u@\h \W]\$ с самим приглашением [ya@antony
]$ можно сделать следующие выводы:
1. Символы [, @, ], $ означают сами себя.
2. \u — специальный символ, означающий логин пользователя «ya».
3. \h — специальный символ, означающий имя компьютера (хоста) «antony».
4. \W — специальный символ, означающий рабочую директорию. (Как известно, тильда (
) обозначает домашнюю директорию).
В данном примере мы без труда разобрались со структурой переменной PS1 из дистрибутива AltLinux 4.1. В других дистрибутивах структура эта может оказаться далеко не столь очевидной. Например, в дистрибутиве Debian Lenny:
Что означает вся первая часть \[\e]0;\u@\h: \w\a\]$
Мы остановились на структуре переменой PS1, чтобы знать, какие специальные символы определяют различные части приглашения командной строки для того, чтобы расцветить их.
Раскрашивание производится внесением определенных изменений в структуру переменной PS1.
Например, чтобы символ доллара сделать желтого цвета, нужно ввести следующую команду:
Таким образом, чтобы расцветить некую часть приглашения, нужно непосредственно перед этой частью подставить выражение \[\033[Хm\] . В случае желтого цвета, вместо Х подставляем 33;1 . Если подставить просто 33 , то получится кирпичный цвет; если 33;4 то кирпичный подчеркнутый; если 33;5 то кирпичный символ станет мигать; если 33,7 то будет черный символ в кирпичном квадратике. К слову сказать, безразлично в каком порядке ставить значения вокруг точки с запятой, так 33;1 эквивалентно 1;33 .
Вот таблица основных цветов
Добавление к номеру цвета через точку с запятой единицы дает более светлый оттенок:
Добавление к номеру цвета через точку с запятой четверки дает подчеркивание:
Добавление к номеру цвета через точку с запятой пятерки дает мигающий символ:
Добавление к номеру цвета через точку с запятой семерки дает черный символ на фоне соответствующего цвета:
Если вместо номеров 30-38 подставить номера 40-48, то окрашиваться в те же самые цвета будут не символы, а фон вокруг них. Например:
Можно также составлять более сложные комбинации цветов фона и шрифта:
Словом, огромный простор для экспериментов.
Внимательно просмотрев все вышеприведенные команды PS1=». » следует обратить внимание, что все они заканчиваются одним и тем же выражением \[\033[m\] . Дело в том, что данное выражение равнозначно выражению \[\033[0m\] , что задает «никакой» цвет, то есть тот цвет, что был первоначально. Это необходимо, чтобы весь дальнейший текст (вводимые команды, параметры, вывод команд) производился обычным цветом консольного текста, а не окрашивался в новые цвета.
При расцвечивании приглашения командной строки мы не обязаны ограничиваться только знаком доллара. Можно окрасить любую часть приглашения в один из перечисленных цветов. Например, окрасим ya@antony в темно-красный цвет. На черном фоне это будет заметно и не слишком ярко:
Раскрашивайте приглашение командной строки на свой вкус, однако помните, что стоит закрыть окно консоли, как все ваши краски исчезнут.
Для того, чтобы сделать разноцветное приглашение постоянным, его надо вписать в конец файла .bashrc в вашем домашнем каталоге. Вписываем в том же виде, как вводили в командную строку:
Теперь окно эмулятора терминала будет всегда открываться с цветным приглашением. Также будет оно цветным и в терминале, открываемом при помощи комбинации клавиш CTRL+ALT+Fn.
Но стоит вам сменить логин, например на root, как консоль снова станет одноцветной. Это лишний раз напомнит вам, что вы обладаете правами суперпользователя и должны соблюдать осторожность. А можете раскрасить также и root-консоль, только в другие цвета, чтобы сразу было видно. Для этого нужно строку PS1=». » вписать в файл /root/.bashrc/ .
Источник
Разноцветные терминалы
В этой публикации я расскажу о некоторых трюках, которые украсят будни любого системного администратора Linux (и не только). Все они связаны с переменной PS1 оболочки bash. Переменная PS1 определяет, как будет выглядеть приглашение для ввода новых команд. И каждый пользователь может переопределять её как пожелает, например, в файле
/.bashrc (который выполняется при запуске bash и используется для в том числе для конфигурации).
Для начала рассмотрим простой вариант, мой любимый формат командной строки.
Результат будет вот такой:
Это обычное использование переменной PS1, но если бы я не начал с этого — рассказ был бы неполным. Обычно в переменной PS1 с помощью специальных последовательностей символов определяют формат приглашения для ввода команд. Подробный список этих последовательностей можно почитать в документации к bash, в данном примере:
- \t — вывод «текущего времени», на самом деле это получается время завершения выполнения предыдущей команды, удобно когда перед глазами.
- j\j — выводит символ j и после него количество запущенных job, т.е. процессов в фоне. Это тоже удобно иметь перед глазами чтобы случаем про них не забыть когда соберешься закрыть терминал.
- \u@\h — имя пользователя и название сервера. Если работаете с несколькими серверами через удаленные терминалы — чтобы не путаться.
- \w — после двоеточия — рабочая директория.
- \n — поскольку строка получилась хоть и информативной (что-то вроде статус бара), но длинной, то приглашаем вводить команды с новой строки, а эта верхняя строка будет наглядно отделять от результата работы предыдущей команды.
- \$ — на новой строке будет выводится символ либо $ для обычного пользователя либо # для root’а и отделив его пробелом можно приглашать вводить новую команду.
Казалось бы, чего еще желать… Но дальше будет интереснее. Дело в том, что с помощью специальных управляющих символов можно задавать цвет выводимого текста, цвет курсора и даже переопределять title bar у таких графических терминалов, как Gnome2. И, на мой взгляд, довольно удобно когда цветом отделяются терминалы запущенные на различных серверах. Для меня каждый сервер ассоциируется с каким-то цветом и в этот цвет мы будем красить командную строку и курсор на каждом сервере.
У меня .bashrc разделен на два файла, в самом .bashrc содержится общий код для всех серверов, а в .bash_local — уникальные для этого сервера настройки командной строки. .bash_local я буду вставлять в .bashrc специальной директивой. Начнем с .bash_local. В контексте данной статьи там у меня будут две строчки, которые определяют цвет этого сервера:
Просто заношу коды цвета в переменные. Но, как вы заметили, что способ задания цвета для курсора и для текста командной строки — разный. Почему-то так исторический получилось. Чтобы понять, какой цвет каким кодом кодируется, есть подходящая картинка.
Посредине — обозначение цвета для цвета курсора, снизу — обозначение цвета для текста. Как вы можете увидеть, что я для текста и курсора использую цвет морской волны. Т.к. название сервера petrel («буревестник»), то он ассоциируется у меня с этим цветом.
Теперь .bashrc, тоже показываю его не полностью, а только то что имеет отношение к теме:
Тут я вставляю код из .bash_local в общий файл. Таким образом определяться ранее описанные переменные с цветом сервера.
Еще две переменные определяю с чисто красным цветом, он будет использоваться для маркировки терминалов привелигированного пользователя (root’а).
Тут проверяется какой используется терминал. Для любого неизвестного или неподдерживающего цвета будет использоваться приглашение без цвета (PS1=’\t j\j \u@\h:\w\n\$ ‘) так, как я это описал в начале статьи. Но если имя терминала начинается на xterm или rxvt, например, так себя позиционирует терминал Gnome, начинаем кудесить с цветом. Первая строчка — задаем цвет текста — цвет сервера и выводим первую строку приглашения ввода команд. Она всегда будет окрашена в цвет сервера. Вторая строчка — проверяем, работаем ли мы под непривелигированным или привелигированным пользователем (root’ом). Если root — то переопределяем цвета на красный. Третья строчка — формируем вторую строчку приглашения и определяем цвет курсора в терминале. Т.е. там у нас получится либо $ и через пробел курсор, оба покрашенные в цвет сервера, если пользователь обычный. Либо красный # и через пробел красный курсор, если это root.
А это, если честно, один в один скопированно из первоначального .bashrc от Дебиана. Знаю, что этот код видоизменяет title bar у окна, размещает там информацию об пользователе, сервере и домашней директории. Но поскольку этот код придумал не я, комментировать его не буду.
В результате у нас должно получится так, как на картинке в самом начале публикации.
Источник
Как изменить формат строки приглашения в терминале Linux
Введение
Строка приветствия или приглашения (prompt) представляет собой текст, после которого пользователь может вводить команды в терминале Linux. В каждом дистрибутиве Linux строка приветствия имеет свою форму, например в CentOS 7 по умолчанию она выглядит так:
Вид строки приглашения по умолчанию в CentOS 7
Форма строки приглашения хранится в переменной PS1 .
Увидеть шаблон, по которому строится строка приглашения можно с помощью вывода переменной PS1 .
Как видим строка состоит из обычных символов, которые выводятся в терминале как есть и экранированных символов вместо которых подставляются следующие данные:
- \u — (user) имя текущего пользователя.
- \h — (host) имя текущего хоста.
- \W — (working directory) путь к рабочему каталогу (каталог, где сейчас находится пользователь).
- \\$ — тип пользователя (# — для root, $ — для обычных пользователей).
Как изменить формат строки приглашения в терминале
Перед тем как изменять строку приглашения рекомендую сохранить ее текущий формат, чтобы в любом случае можно было все вернуть назад.
Сохраним текущий формат строки приветствия в новую переменную — PS1_SAVE .
Чтобы изменить формат строки приглашения, нужно изменить значение переменной — PS1 . Самая простая строка приглашения этот всего лишь один символ с пробелом.
Обычный текст не блещет информативностью, поэтому кроме него вам могут пригодиться экранированные символы, их список вы можете видеть ниже.
Простые экранируемые символы
- \a — звуковой сигнал (ASCII: 07)
- \e — символ escape-последовательности
- \» — двойные кавычки
- \\ — обратный слэш
- \n — новая строка
- \r — возврат каретки (курсора) на начало строки
- \[ — начало последовательности непечатных символов
- \] — конец последовательности непечатных символов
- \nnn — восьмеричный код символа (\113 -> K)
Вывод даты и времени
- \d — дата в формате «день недели месяц число»
- \D <формат даты>— дата в указанном формате, например \D
- \@ — время в 12 часовом формате «часы:минуты AM\PM»
- \A — время в 24 часовом формате «часы:минуты»
- \t — время в 24 часовом формате «часы:минуты:секунды»
- \T — время в 12 часовом формате «часы:минуты:секунды
Вывод системной информации
- \h — имя хоста до первой точки
- \H — полное имя хоста
- \j — количество работ (jobs), выполняемых в терминале (скрытых после нажатия Ctrl+Z)
- \s — имя текущей оболочки (вывод значения переменной — $0)
- \u — имя текущего пользователя
- \v — версия оболочки BASH
- \V — более детальная версия оболочки BASH
- \w — полный путь к текущей директории
- \W — имя текущей директории
- \! — номер текущей команды в истории команд
- \# — номер текущей команды за период сессии
- \\$ — тип пользователя (# — для root, $ — для всех остальных)
Рассмотрим пример создания кастомной строки приглашения. Выведем имя пользователя, имя хоста и полный путь для каталога, а с новой строки — тип пользователя.
Если вы хотите вернуть все назад то просто вставьте значение переменной PS1_SAVE , в которой мы сохранили изначальный вид строки приглашения.
Для того чтобы изменения переменной PS1 были сохранены для последующих сессий в терминале, нужно прописать значение этой переменной в файлах настроек терминала
/.bashrc или /etc/bashrc .
Сохранение нового формата строки приглашения на постоянной основе
При каждом запуске терминала значение переменной PS1 устанавливается в соответствии с тем значением, которое указано в файле /etc/bashrc . Однако крайне не рекомендуется изменять что-либо в этом файле. Вместо редактирования файла /etc/bashrc предусмотрен специальный каталог /etc/profile.d , в котором можно создавать свои файлы *.sh с необходимым вам функционалом.
Создадим файл /etc/profile.d/custom.sh для необходимой нам настройки оболочки bash. Данный файл будет автоматически импортирован в /etc/bashrc , поэтому никаких дополнительных действий не потребуется.
Далее уставим нужное нам значение переменной PS1 , я также добавлю немного цвета для строки приветствия.
PS1=»\e[1;38;5;48m\u@\h\e[m:\e[1;38;5;45m\w\e[m\n\\$ »
# Добавим сообщение для авторизованных пользователей
logged_user=$USER # Логин пользователя
echo -e «\e[1;38;5;215mЗдравствуйте $
Для применения новых настроек в файле /etc/profile.d/custom.sh необходимо перезапустить терминал. Также для перезапуска можно использовать команду exec.
Теперь когда пользователь будет заходить в свою учетную запись в терминале, он увидит следующий результат.
Результат изменения строки приглашения в файле /etc/profile.d/custom.sh
Важно, что все эти настройки будут применены для всех пользователей. Если вы хотите настроить bash только для одного пользователя, то используйте скрытый файл .bashrc , который находится в домашнем каталоге пользователя. Для применения настроек в
/.bashrc необходимо будет перезапустить оболочку — source
Вы также можете раскрасить свою строку приветствия, о том как это сделать вы можете почитать здесь.
Понравилась статья? Расскажите о ней друзьям!
Источник