| Строка приглашения в Bash |
|
Автор статьи: sKwa
ВведениеИногда в терминале вынужден возвращаться к выводу ранее запущенных команд и довольно сложно разглядеть приглашение командной строки в символах одинакового цвета. Конечно, можно повторить команду и послать её в канал (pipe) с less или more, но всё же хотелось бы чтоб строка приглашения как-то выделялась среди всех других в терминале, даже просто из эстетических соображений. Неплохо бы использовать цвета в качестве разделителя? Переменные среды строки приглашенияЗа строку приглашения отвечают такие переменные среды, как PS1, PS2, PS3, PS4 и PROMPT_COMMAND.
Значение каждой переменной можно узнать, введя в терминале: $ echo $имя_переменной К примеру, узнать значение переменной PS1:
Изменить значение переменной можно двумя способами. Способ первый - указать значение непосредственно в терминале с помощью команды export: $ export имя_переменной='значение' К примеру, указать значение переменной PS1:
Способ второй - с помощью вашего любимого редактора дописать в .bashrc требуемые значения: gedit ~/.bashrc И в конце файла добавляем требуемые значения: PS1='\u\w\$ ' Все значения нужно заключать в кавычки, одинарные или двойные не имеет значение, но ОБЯЗАТЕЛЬНО заключать! Файл конфигурации BashКак уже было сказано выше, есть два способа указать значение переменных и есть разница между этими способами. При указании непосредственно в терминале изменения вступят в силу незамедлительно и будут действительны только в данной сессии. При изменении в файле конфигураций вступят в силу только при следующей сессии терминала, но действительны будут и в последующих сессиях. Так что экспериментируйте с командой экспорт, а понравившейся результат занесите в файл конфигурации. По умолчанию строка приглашения в терминале в Ubuntu для обычного пользователя имеет следующий формат: имя_пользователя@имя_хоста:текущий_каталог$ Для суперпользователя (root) уже другой: root@имя_хоста:текущий_каталог# Чтобы изменить строку приглашения обычного пользователя, указать новое значение переменных нужно в файле конфигурации в домашнем каталоге ~/.bashrc, а для root в файле /root/.bashrc. Для этого откройте свой любимый текстовый редактор и добавьте нужные значения. К делуУ меня строка приглашения по умолчанию выглядит так:
Вид этого приглашения можно задать в переменной PS1. Для указания значений этой переменной используется специальный формат из управляющих последовательностей и обычного текста. Специальные управляющие последовательности упрощают настройку внешнего вида приглашения командной строки. К примеру, следующая последовательность \$ заставляет Bash отображать знак доллара ($), когда пользователь является обычным пользователем системы, но заменяет знак доллара решеткой (#), когда пользователь является суперпользователем (root). Каждая специальная последовательность начинается с обратной косой черты (backslash) - "\". К примеру, последовательность \u указывает, что надо отобразить имя пользователя, \h - имя хоста, \w - текущую папку. Теперь объединим всё, чтобы получить приглашение примером выше: PS1='\u@\h:\w\$ ' Знак "собаки" (@) и двоеточия не предварёны обратной косой чертой (\), поэтому они выводятся на экран как есть. Конец строки заканчивается символом пробела, чтобы набираемый в командной строке текст отделялся от приглашения командной строки. Наиболее популярны следующие управляющие последовательности: ******************* Печатные символы ********************************* Знание этих последовательностей помогает понять, каким образом модифицировать приглашение командной строки. Например, установка переменой PS1='[\A]\u@\h:\w\$ ' заменяет, скажем, на такое значение:
С помощью специальных непечатаемых последовательностей можно изменить цвет приглашения командной строки, что выделит его из обычного текста. Чтобы показать, что вводится значение цвета, необходимо ввести управляющую ASCII-последовательность \e (или восьмеричный ASCII-кодом \033 ). Одна и проблем, которая возникает при использовании не печатных последовательностей, заключается в том, что Bash вычисляет количество символов в приглашении командной строки и использует это число для размещения текста в терминальном окне. Так как коды цветов не выводятся на экран, то они мешают корректному подсчету. Чтобы предотвратить подсчет непечатаемых символов, управляющие последовательности необходимо заключать в управляющие скобки \[ и \]. Для того что бы лучше понять, предлагаю испробовать оба варианта: со скобками и без онных и посмотреть разницу. Изменению в командной строке поддаётся не только текст, но и фон, поэтому формат цвета можно указать двумя способами - для фона и цвета текста или только для текста. \[\е[#;##;#;##m\] Формат последовательности только для текста : \[\е[#;##m\] Где # - специальный номер свойства цвета, а ## - специальный номер цвета. Свойством цвета может быть, например, повышенная или пониженная яркость. В формате для фона и цвета в начале указывается фон, а после цвет самого текста.
Полный список кодов цветов зависит от типа используемого терминала. Подытожим раскрасив предыдущее приглашение командной строки следующим образом - время ярко-красным цветом, имя пользователя ярко-жёлтым, имя хоста ярко фиолетовым, а текущий рабочий каталог ярко-синим цветом и в конце приглашения командной строки отметим установку цветового кода в ноль (который обозначает значение по умолчанию):PS1='\[\e[1;31m\][\A]\[\e[1;33m\]\u@\[\e[1;35m\]\h:\[\e[1;34m\]\w\$\[\e[0m\] ' Результат:
Приведу ещё один пример с использованием фона: время раскрасим черным на белом фоне, а всё остальное ярко-синим: PS1='\[\e[5;47;5;30m\][\A]\[\e[0;1;34m\]\u@\h:\w\$\[\e[0m\] '
Описание следующих переменных строки приглашения будет кратким, особо не вдаваясь в подробности, но предоставит вам представление, за что они отвечают. Вторичная строка приглашения появляется, к примеру, когда ввод команды в первичном приглашении переносится на следующую строку. Сообщить командному интерпретаторуо том, что ввод продолжается в следующей строке, можно, введя обратную косую черту "\" в конце строки и введя Enter. По умолчанию отображается как ">". Формат этой переменной идентичен формату переменной PS1.
А вот почти тот же пример, но строка приглашения разукрашена. Более читабельно?
Этот вид приглашения используется в скриптах, когда нужно сделать выбор при использовании оператора select. Простой наглядный пример bash-скрипта и его вывод: #!/bin/bash
Приглашение четвертого уровня PS4 так же используется в скриптах. К примеру ключ -v заставляет выводить на экран терминала каждую команду прежде, чем она будет исполнена. Ключом -x подобно ключу -v, но выполняет подстановку команд и перед каждой командой выведет четверичное приглашение. Пример bash-скрипта и его вывод: #!/bin/bash -x
С помощью этой переменной можно задать выполнение определённых команд перед каждым первичным приглашением. В основном, она используется, когда нужно расширить возможности первичного приглашения, вызывая какую-то дополнительную функцию или команду или даже целый скрипт. К примеру, я хочу, чтобы перед каждым первичным приглашением происходил вывод текущего каталога и календаря на месяц: PROMPT_COMMAND='ls; cal'
Так как эта переменная более функциональна, ею можно заменить первичное приглашение, но при этом надо уметь писать скрипты для Bash, что выходит за рамки повествования. Для более подробной информации читайте: man bash. |













