Системное приглашение на прокачку

Posted on June 22nd, 2007 in bash, linux, manual, tips by RiZN

Хммм, блог так и не добавился (это я про прошлый пост). Ну да ладно.
Что можно настроить “под себя” в линуксе? Да всё, что угодно. Одним таким способом тюнинга любимой оси мы и займёмся. Когда человеку надоедает работа в иксах, он перелезает в консоль и радуется большому спектру возможностей, высокой производительности и прочим преимуществом отсутствия графических свистелок. А что главное в консоли? Системное приглашение, конечно же. Именно его-то мы и настроим. Работать будет в 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 (для конкретного юзера) и прописать туда значение переменной вместо стандартной.

RSS feed | Trackback URI

Comments »

No comments yet.

Name (required)
E-mail (required - never shown publicly)
Subscribe to comments via email
Your Comment (smaller size | larger size)
You may use <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> in your comment.