Курс выживания в консоли
Andrushock
Xakep, номер #061, стр. 061-080-2
Укрощение строптивого
Забираем с одного из многочисленных мирроров архив с последней (на момент написания статьи 4.1.1) версией zsh. Несмотря на то, что эта версия относится к ветке devel и предназначена для разработчиков (а значит, имеет самые новые и вкусные фичи), она достаточно стабильна в работе и полностью готова к применению.
$ wget ftp://ftp.fu-berlin.de/pub/unix/shells/zsh/zsh-4.1.1.tar.gz
Распаковываем и переходим в созданный каталог:
$ tar zxvf zsh-4.1.1.tar.gz
$ cd zsh-4.1.1/
К процессу инсталляции zsh можно подойти с разных сторон. Первый путь предельно прост - особо не задумываясь, положиться на работу конфигурационного скрипта:
$ ./configure
Второй способ установки заключается в статической компоновке с совместно используемыми библиотеками (такая линковка необходима для работы программ в chroot()'ных средах) командной оболочки с подключением встроенных средств борьбы с утечками памяти:
$ env LDFLAGS="-static" ./configure --enable-zsh-mem --enable-zsh-secure-free --disable-dynamic
А третий предназначен для "счастливых" обладателей старых компов. Дело в том, что zsh работает заметно медленнее (расплата за широкие возможности) своих конкурентов, поэтому имеет смысл отключить из оболочки все что можно, а именно поддержку больших файлов и локали. Также можно отказаться от использования ограниченного режима оболочки, при работе в котором пользователям запрещено изменять каталоги и переменные окружения, с помощью вызова exec запускать программы и осуществлять перенаправление вывода в файлы.
$ ./configure --disable-lfs --disable-locale --disable-restricted-r
Если же в системе вместо архаичного mbox'а используется почтовый формат Maildir, то не забудь скрипту configure передать дополнительный аргумент "--enable-maildir-support".
Далее компилируем и растасовываем свежеиспеченные бинарики по файловой системе:
$ make
# make install
Абсолютный путь до zsh прописываем в конец файла /etc/shells, где содержится список доступных в системе командных оболочек:
# echo "/usr/local/bin/zsh" >> /etc/shells
После внесения этого изменения у пользователей появится возможность командой chsh изменить свой стандартный командный интерпретатор на zsh:
$ chsh
Shell: /usr/local/bin/zsh
Full Name: Andrushock
Чудеса хардкорного твикинга
При запуске zsh пытается прочитать более десяти своих конфигурационных файлов. Такое обилие не случайно - все сделано для чрезвычайно гибкой настройки интерактивных и неинтерактивных шеллов, а также для большей совместимости с bash и tcsh. Не волнуйся, мы обойдемся написанием всего лишь одного конфига:
$ vi ~/.zshrc
Следующие переменные содержат списки каталогов, которые будут использованы оболочкой при поиске команд для выполнения (точка в массиве path означает текущий рабочий каталог):
cdpath=(~ ..)
fpath=($fpath ~/.zfunc)
path=(/bin /sbin /usr/bin /usr/sbin /usr/local/bin /usr/local/sbin .)