Системное приглашение на прокачку
Хммм, блог так и не добавился (это я про прошлый пост). Ну да ладно.
Что можно настроить “под себя” в линуксе? Да всё, что угодно. Одним таким способом тюнинга любимой оси мы и займёмся. Когда человеку надоедает работа в иксах, он перелезает в консоль и радуется большому спектру возможностей, высокой производительности и прочим преимуществом отсутствия графических свистелок. А что главное в консоли? Системное приглашение, конечно же. Именно его-то мы и настроим. Работать будет в bash, пользуясь её распространенностью.
Дефолтное системное приглашение выглядит примерно вот так:
user@host:directory$ -- для юзера и
root@host:directory# -- для рута
Скучно и уныло. Возможно, я всегда работаю на локальной машине и отображение хоста лишь занимает лишнее место и мешает. А может, мне хочется всегда быть в курсе точного времени, да и вообще, хочу красиво и в цвете! Нет ничего проще, если читать маны. Для таких же ленивцев, как и я, возникла идея написать русскоязычное пособие по настройке системного приглашения bash.
Вид системного приглашения задается с помощью четырёх переменных:PS1, PS2, PS3 и PS4, которые, будучи заданы, влияют на:
- PS1 - Основное системное приглашение
- PS2 - Дополнительное системное приглашение. По умолчанию, “>”
- PS3 - Системное приглашение выбранной команды
- PS4 - Значение этой переменной выводится до каждой команды, отображаемой bash во время исполнения чего-то. Первый символ переменной выводится для показания того, что процесс выполняется в несколько строк. По умолчанию, это “+”
Начать стоит с того, что посмотреть текущее значение этих переменных, что очень просто
$ echo $PS1
У меня вывелось примерно следующее:
${debian_chroot:+($debian_chroot)}\u@\h:\w\$
Ничего, изменим так, как нам нужно. Введём
PS1="Hello: "
и увидим, как изменилось наше системное приглашение. Теперь пришло время заняться делом :) Вот список специальных символов, которые можно использовать:
- \a : ASCII-символ “bell”
- \d : текущая дата в формате “день_недели месяц число” (например, “Птн Июн 22″)
- \e : ASCII-символ “escape” (033)
- \h : имя хоста до первой ‘.’
- \H : имя хоста целиком
- \j : количество задач, выполняемых в шелле
- \l : базовое имя текущего терминала (или порядковый номер)
- \n : перенос строки
- \r : возврат каретки
- \s : имя шелла
- \t : текущее время в 24-часовом HH:MM:SS формате
- \T : текущее время в 12-часовом HH:MM:SS формате
- \@ : текущее время в 12-часовом am/pm формате
- \A : текущее время в 24-часовом HH:MM формате
- \u : имя текущего пользователя
- \v : номер версии баша
- \V : номер релиза баша (версия + патчлевел)
- \w : полный путь до текущей директории
- \W : имя только текущей директории (без пути)
- \! : номер текущей команды в хистори
- \# : номер команды в списке команд
- \$ : если текущий UID равен 0, покажет #, иначе $
- \nnn : покажет символ по его восьмеричному коду “nnn”
- \\ : бэкслэш
- \[ : начало последовательности непечатаемых символов
- \] : конец последовательности непечатаемых символов
Введем например следующую последовательность:
PS1="\t \d \w \$"
и увидим
20:56:35 Птн Июн 22 /etc/ $
Конечно же, это не идеал системного приглашения, но уже интереснее. И последнее, что важно знать, что всё, что мы бы не наделали, сбросится после перезагрузки. Чтобы закрепить понравившийся вариант, надо открыть текстовым редактором файл /etc/bashrc (для изменения системного приглашения для рута) или ~/.bashrc (для конкретного юзера) и прописать туда значение переменной вместо стандартной.