Zsh. Знакомимся “вживе”

Установив zsh тем или иным образом, попробуем на практике ознакомиться с его возможностями, о которых я столько писал на предшествующих страницах.

Сделать это можно тремя способами. Первый -- определить zsh как свою пользовательскую оболочку по умолчанию -- login shell. Это выполняется либо одной из команд типа usermod, pw, chsh, либо штатным графическим средством данного дистрибутива. В Fedora со средой GNOME это проделывается через меню Администрирование -> Пользователи и группы.

Этот способ -- именно для первого знакомства не самый подходящий: по причинам, которые станут ясны из дальнейшего рассказа, пользователь сразу окажется в весьма непривычном окружении. Хотя, с другой стороны, сжёгши за собой таким образом мосты, он будет вынужден разбираться с новым шеллом до победного конца. Так что при наличии толики свободного времени -- способ вполне приемлемый: именно таким образом я начал изучение zsh лет 10 назад. Правда, во FreeBSD, где любой пользовательский шелл будет лучше, чем умолчальный /bin/sh.

Второй способ -- просто запустить команду

$ zsh

в строке эмулятора терминала. Что, с одной стороны, ни к чему не обязывает. Но, с другой -- в этом случае будет запущен сценарий автоматического конфигурирования. Который, конечно, облегчает первичную настройку -- но при условии понимания сути проделываемых действий. А мы этот вопрос ещё не изучали -- он стоит на очереди не первым.

Наконец, третий способ -- создать новый аккаунт с условным именем zshuser (или как покажется удобным его обозвать) и сразу определить ему login shell'ом /bin/zsh (при условии, что он собран или установлен именно таким образом). А далее в том же терминальном окне выполнить процедуру смены идентификатора:

$ su -- zshuser

Таким образом мы получаем в своё распоряжение некую умолчальную конфигурацию -- и представление о том, что может zsh без настройки и индивидуализации.

Боюсь, что в свежеустановленном zsh мы имеем шанс не увидеть почти ничего из описанных выше прелестей -- ни развёртывания сокращений путей, ни автодополнений опций и аргументов, ни выразительных приглашений командной строки. Перед нами будет безликая строка с именем машины и пользователя (типа localhost%), которая едва-то будет справляться с обычным автодополнением команд и путей (и то -- не обязательно). Могут возникнуть проблемы даже с вызовом собственной экранной документации man zsh. Почему?

Дело в том, что zsh имеет очень богатый набор собственных конфигурационных файлов, о которых я скажу чуть ниже. Но при установке его эти файлы не всегда помещаются автоматически в каталог /etc или в домашний каталог пользователя -- то есть те места, где их можно было бы ожидать. Конечно, совсем без первичных настроек zsh не останется: он прекрасно воспринимает их из таких общесистемных профильных файлов, как /etc/profile, /etc/login и т.д.

Однако, во-первых, для этого он должен быть собран должным образом. А во-вторых, и вести себя при этом он будет почти точно также, как и соответствующие оболочки (bash или tcsh, а то и /bin/sh -- почему, например, во FreeBSD zsh по первости не способен даже к автодополнению команд). От одного из этих профильных файлов zsh унаследует и переменные окружения, включая MANPATH -- почему подчас не сможет найти и свою собственную документацию.

Так что для придания zsh полного блеска следует прибегнуть к его собственным конфигурационным файлам. Правда, сначала придётся отыскать их примеры из штатной поставки -- должен заметить, что в разных системах они могут обнаружиться в весьма неожиданных местах. Так, во FreeBSD их штатное место -- каталог /usr/local/share/examples/zsh, в дистрибутиве Gentoo Linux примеры оказываются в /usr/share/doc/zsh-XXX-rX/StartupFiles, в иных -- вполне могут оказаться где-нибудь в районе /usr/share/zsh. А в дистрибутиве Fedora примеров конфигурационных файлов просто нет вообще.

Для минимизации времени на поиски выдам секрет -- примеры конфигурационных файлов zsh, входящие в штатный комплект, обычно называются -- zlogin, zshenv и zshrc (возможно, с расширением .gz), и благодаря моей доброте :-) их не трудно будет отыскать командой find -- за пределы каталога /usr файлы эти попасть не должны (даже в том случае, если, как в Gentoo, сам исполняемый файл zsh оказывается в каталоге /bin).

После изыска конфигов для сердца вольного есть два пути. Первый -- простой, копируем их в наш домашний каталог в качестве dot-файлов (~/.zlogin, ~/.zshenv и ~/.zshrc, соответственно), после чего наслаждаемся жизнью. В ряде случаев этого достаточно, чтобы получить доступ к базовым (но очень даже расширенным, сравнительно с собратьями) возможностям этого шелла.

Разумеется, суперпользователь может скопировать эти файлы и в каталог /etc (без точек в имени) -- в этом случае они будут определять конфигурацию zsh для всех пользователей, его запускающих (любым образом, о чем -- чуть ниже).

Второй путь -- попытаться разобраться, за что отвечают скопированные файлы и как они устроены. Это понадобится в двух случаях -- а) для идеальной настройки своего нового шелла и б) если zsh работает не совсем так хорошо, как вы ожидали (например, не так, как было описано на вводных страницах).

. .