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
работает не совсем так хорошо, как вы ожидали (например, не так, как было описано на вводных страницах).