Алексей Федорчук
Как известно со времён со времён Константин Сергеича Станиславского, театр начинается с вешалки, а дистрибутив — с инсталлятора. Командная же оболочка начинается с приглашения командной строки. Каковая, во-первых, отражает готовность системы к выполнению действий применителя, а во-вторых, несёт (или должна бы нести) некую существенную для него информацию.
Правда, умолчальное приглашение Zsh информативностью не блещет, сообщая только имя хоста (в примере на предыдущей странице — alv-cinn
), и то, что сеанс шелла запущен обычным пользователем — в отличие от Bash’а, здесь это по умолчанию выражается символом %
. Однако добавить информации нам никто не мешает. А помогает — файл zshexports.gz
из пакета zsh-lovers
, упомянутого в позапрошлом очерке. Его можно просмотреть командой
$ zcat path2/zshexports.gz
отыскать в нём секцию, начинающуюся словами
# PS{1,2,3}, RPOMPT, .. # The "prompt" of the shell ...
внимательно изучить её, а также фрагмент конкретных примеров:
# Some examples: # PS1="PS1='%B%n%b@%m:%4c>'" ...
осмыслить прочитанное и опробованное на примерах. После чего решить, какую же информацию вы хотите видеть в приглашении командной строки.
Я, например, не хочу видеть там имени хоста, поскольку не дожил ещё до ситуации из известного аккордеонистого бояна: «Кто я, кто я? Губайдулин я!» Да и вообще, времена, когда каждая машина в сети имела собственное неповторимое имя, канули в лету, и нынче так называемое «хвостнаме» берётся от булды.
А вот имя пользователя в явном виде будет не лишним — у меня на основной машине их обычно не менее трёх: рабочий, экспериментальный и умолчально-восстановительный. Также неплохо иметь предсмтавление о своём положении в файловой иерархии, причём в полном виде — одноимённые подкаталоги часто находятся в разных её ветвях. Приглашение получается перегруженным? Отнюдь, потому что в Zsh таковых предусмотрено два — просто PROMPT и RPROMT, и перечисленные элементы можно разнести таким образом:
/home/data/current $=> [alv]
Или наоборот, таким:
[zshuser]$=> [/home/data/current]
Добиться этого можно, как вы понимаете, редактированием файла ~/.zshrc
. До сих пор он у нас содержал единственную строку комментария:
# Created by newuser for 5.0.2
Теперь же добавляем в него сторки для получения приглашения первого вида:
## Prompt PROMPT='%~ $=> ' RPROMPT=' [%n] '
Или второго:
## Prompt PROMPT='[%n]$=> ' RPROMPT=' [%~] '
Раньше мне больше нравился первый вариант, но ныне я перешёл на второй.
Кроме обычного, то есть «левого» приглашения и приглашения «правого», в Zsh поддерживаются также приглашение «вторичное», выводимое в многострочных командах, и «третичное» — предложение вариантов замены при включённой коррекции ошибок, PROMPT2
и PROMPT3
, соответственно. Вторичное приглашение у меня имеет вид
PROMPT2='%i%U> '
В результате в нём выводится номер «вторичной» строки в данном сеансе шелла, указывается стрелкой на то, что ввод следует в ней продолжить, а сам ввод даётся подчёркнутым шрифтоначертанием. Вживе это выглядит так:
[zshuser]$=> echo $USER \ [~] 33> echo $SHELL \ 34> echo $PATH zshuser echo /bin/zsh echo /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Что же до коррекции ошибок, у меня она отключена (к этому вопросу мы ещё вернёмся).
А вообще, как можно увидеть в файле zshexports.gz
, в любом из видов приглашения командной строки могут фигурировать:
- полное или сокращенное имя хост-машины;
- путь к текущему каталогу в различных формах;
- номер текущей команды в буфере истории или строки в данном сеансе работы;
- имя пользователя;
- название командной оболочки;
- номер виртуальной консоли или текущего терминала;
- дата и время в разных форматах;
- индикация работы от лица суперпользователя;
- любые символы типа стрелок, крышечек, скобочек;
- текстовые сообщения (например, поздравление с началом трудового процесса);
- и многое другое.
Кроме того, приглашение могут быть оформлены визуально различно: выделением жирным шрифтом (boldface mode), инвертированием текста/фона (standout mode), полчёркиванием, (underline mode) а также цветами. «Раскрашенный» шелл мне нравится не больше, чем «раскрашенный» Штирлиц, иневертирование также вызывает раздражение, а вот выделение полужирным шрифтоначертанием и подчёркиванием я использую. В результате секция настройки вида приглашения в моём ~/.zshrc
выглядит так:
# Left prompt PROMPT='%B[%n]$=>%b ' PROMPT2='%i%U> ' # # Right prompt RPROMPT=' %B[%~]%b '
Как уже говорилось, я не призываю к подражательству, а лишь предлагаю поэкспериментировать, чтобы добиться максимальной информативности приглашения и его внешней выразительности.
У вас опечатка: «позапрошлос очерке».
Спасибо, поправил