2013-08-14

Z shell без привыкания

Поднимите руку, если до сих пор не пользуетесь ZSH, предпочитая BASH из стандартной поставки к вашему дистрибутиву. Если вы робко потянули ладонь вверх, этот пост посвящен вам.

У меня несколько раз возникало острое желание попробовать ZSH, но все попытки гибли перед мыслью: «Зачем менять то, что и так работает? Зачем тратить время на настройку и изучение конфига ZSH?». Мне выпала случайность наткнуться на гитхабе на проект oh-my-zsh. Он решил все мои проблемы и помог перейти на ZSH, минуя этапы настройки окружения. То есть, запустил пару команд, сменил интерпретатор и... всё. Вуаля! Переезд окончен.

Сперва я пользовался zsh точно так же, как и bash'ем. Со временем привык к его магическому автодополнению и поиску по истории для конкретной команды. Прошло уже около года. Много раз порывался написать заметку в блоге о проблемах, с которыми могут столкнуться новички. Единственная причина, почему до сих пор не было никаких упоминаний ZSH — проста и банальна. Всё работает «из коробки», нет дискомфорта, ностальгия по башу не мучает. Вы продолжаете пользоваться терминалом, как и прежде, без необходимости менять старые привычки.

Рассылка от slideshare недавно подкинула интересную презентацию “Why Zsh is Cooler than Your Shell”. Я считаю, этот материал лучшим для завлечения тех, кто еще не с нами :-) Посмотрите презентацию и вы поймёте, о чём я говорю.



Итак, вы узнали, почему Z shell лучше BASH:
  • Автодополнение для команд, ключей к командам;
  • Развертывание пути по первым буквам названия каталогов;
  • Исправление опечаток в командах.

Продолжать не буду. Вижу, что вам не терпится попробовать ZSH в деле. Установим необходимые пакеты:
sudo apt-get install git zsh

Git нам понадобится позже. Для установки oh-my-zsh предлагается автоматический режим (через shell-скрипт) и последовательное выполнение команд. На всех моих системах автоматический режим давал сбои, поэтому рекомендую запускать команды по порядку. Клонируем репозиторий:
git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh

Копируем исходный конфиг .zshrc:
cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc

А теперь меняем командную оболочку:
chsh -s /bin/zsh

Запускаем командой zsh и начинаем радоваться переменам проверяем настройки по умолчанию. Откройте ~/.zshrc в любимом текстовом редакторе:
vim ~/.zshrc

Сначала подберите тему цветового оформления. За это отвечает переменная ZSH_THEME. Затем включите необходимые плагины. У меня загружается всего три:
plugins=(git autojump command-not-found)

Для autojump потребуется установить одноимённый пакет.

В ежедневной работе вы можете столкнуться с записями вида:
$ sudo aptitude install autojump
zsh: correct 'aptitude' to '.aptitude' [nyae]?

Чтобы избавить zsh от избытка интеллекта, можно запретить исправление команд:
echo unsetopt correct_all >> ~/.zshrc

На этом всё. Надеюсь, вы осмелитесь попробовать и останетесь довольны.

14 комментариев:

  1. Большинство скриптов в моём дистрибутиве ОС написаны на BASH. Я тоже пишу скрипты и не хочу плодить сущности. ЕМНИП, то у ZSH несколько другой синтаксис.
    В BASH тоже есть автодополнение команд и директорий. Если я опечатаюсь, то лучше исправлю свою команду сам так, как я хочу.

    ОтветитьУдалить
  2. Системные скрипты в уважающем себя дистрибутиве должны соответствовать POSIX Shell :)
    Что, кстати, и есть в Ubuntu, dash - это примерно он.
    А с точки зрения удобства интерактивной работы zsh, после должной настройки, далеко превосходит bash.

    Антон, спасибо за ссылку на oh-my-zsh, опробую в ближайшее время ради интереса.
    Хотя мой ~/.zshrc кочует у меня из системы в систему вот уже лет 12, с минимальными правками при смене версий.

    ОтветитьУдалить
  3. Я давно уже использую zsh, за основу взял oh-my-zsh, и кастомизировал его немного.

    ОтветитьУдалить
  4. > Если вы робко потянули ладонь вверх

    а если я понимаю руку уверенно, осознанно, и со знанием дела?

    ОтветитьУдалить
  5. Выглядит очень интересно! Спасибо :)

    ОтветитьУдалить
  6. Если вы робко потянули ладонь вверх, этот пост посвящен вам.

    Присоединяюсь к робко поднявшим руку кверху, ибо

    несколько раз возникало острое желание попробовать ZSH, но все попытки гибли перед мыслью: Зачем менять то, что и так работает?

    Собственно, в том и причина. Шелл, скажем так, не то, что мне особенно хочется менять и экспериментировать. Вместо этого использую wcd и доволен.

    Презентация, впрочем, вдохновляет запалить ВиртуальныйЯщик и поиграться там, но тотальное отсутсвие времени не даёт отлить это в граните :-)

    А так оно интересно, конечно. Акулычу спасибо за пищу для размышлений.

    P.S.
    Откройте ~/.zshrc в любимом текстовом редакторе:

    vim


    Тебе худеть надо, Акулыч! :-)

    ОтветитьУдалить
  7. Если вы робко потянули ладонь вверх, этот пост посвящен вам
    Я руку вверх не тянул, ибо уже более года использую zsh в качестве основной оболочки. Но в любом случае читать интересно

    zsh: correct 'aptitude' to '.aptitude' [nyae]?
    А вот я пошёл ещё дальше. Используемые фразы переведены на русский, действия nyae расшифрованы (No Yes Abort Edit), ну и цветовое оформление немножко переделано:

    SPROMPT=" Заменить $fg_bold[grey]'$reset_color$fg_bold[red]%R$reset_color$fg_bold[grey]'$reset_color на $fg_bold[grey]'$reset_color$fg_bold[green]%r$reset_color$fg_bold[grey]'$reset_color? ($fg_bold[grey]Y$reset_color$fg_bold[green]es$reset_color, $fg_bold[grey]N$reset_color$fg_bold[red]o$reset_color, $fg_bold[grey]A$reset_color$fg_bold[red]bort$reset_color, $fg_bold[grey]E$reset_color$fg_bold[blue]dit$reset_color) $fg_bold[green]>$reset_color "

    Выглядит красиво + ошибка сразу же бросается в глаза

    кстати,
    Порывался мигрировать на zsh несколько раз, но всегда отталкивала предстоящая возня с конфигами и настройкой. Случайно набрёл на гитхабе на oh-my-zsh. С его помощью буквально за пару минут переключился на zsh в качестве основного shell'а, о чём нисколечки не жалею. Подумываю написать заметку об этом.
    ZSH rocks! :-)
    (22.08.2012)

    Целый год ждать пришлось :-)

    ОтветитьУдалить
  8. Анонимный15.08.2013, 19:14

    Для bash есть bash-it https://github.com/revans/bash-it

    ОтветитьУдалить
  9. Анонимный15.08.2013, 20:57

    С oh-my-zsh обычно быстро переходят на prezto и вообще yadr.

    http://rocket-science.ru/shell/2013/04/04/yadr-for-dummies/

    ОтветитьУдалить
  10. > Поднимите руку, если до сих пор не пользуетесь ZSH, предпочитая BASH из стандартной поставки к вашему дистрибутиву. Если вы робко потянули ладонь вверх, этот пост посвящен вам.

    Потянул руку, вообще говоря не убедили :) shell конечно можно использовать по-разному, но по-сути у меня стандартный паттерн сводится к двум вещам:
    1) главное - это наращивание pipe-цепочек, в которых присутствуют всякие sed'ы, awk'и и прочие grep'ы. Поможет мне zsh написать sed, awk или grep? - не поможет, он понятия не имеет о том что я хочу написать в одинарных кавычках. А кроме текста в одинарных кавычках, все остальное набирается на автомате, и дополнения чаще всего только мешают.
    2) Исполнение одиночных команд. Так получается, что бОльшая часть этих команд уже есть в history, и я даже представляю себе как это быстро из history выковырять - быстрее чем есть мне не надо - я сам могу начать делать ошибки, иногда не очень приятные ошибки.

    Вобщем чем мне поможет zsh увы не вижу. Какие-то размалевки консоли при путешествии между директориями? - если я хочу красиво и визуально - есть GUI, а если мне надо быстро, но что-то конкретное - дополнения директорий не поможет :)

    ОтветитьУдалить
  11. @Муравей
    > Я тоже пишу скрипты и не хочу плодить сущности.
    В начале скрипта вы указываете, какой интерпретатор использовать. Например, #!/bin/bash. Поэтому проблем с zsh не возникнет. Одно другому не мешает.

    @alv
    > zsh, после должной настройки, далеко превосходит bash
    В этом и суть oh-my-zsh. Убрать настройку, чтобы предоставить полную функциональность и «плюшки» из коробки. Он ещё и обновляется легко с помощью команды upgrade_oh_my_zsh.

    @Denis Evsyukov
    > кастомизировал его немного.
    А что менял? oh-my-zsh сразу начал использовать или сперва сам занимался приготовлением конфига? :-)

    @alexander barakin
    > а если я понимаю руку уверенно, осознанно, и со знанием дела?
    Мне остаётся только восхищаться вами.

    @Dmitry Koroban
    > Выглядит очень интересно!
    Не то слово! Называется, один раз попробуй — полюбишь навсегда :-)

    @virens
    > Презентация, впрочем, вдохновляет запалить ВиртуальныйЯщик и поиграться там
    Я как раз искал что-то ободряющее и завлекающее. С наглядными примерами. Презентация стала прямым попаданием.

    > Тебе худеть надо, Акулыч! :-)
    И пошалить нельзя? :-)

    ОтветитьУдалить
  12. @Vlsu
    > Но в любом случае читать интересно
    Спасибо!

    > Выглядит красиво + ошибка сразу же бросается в глаза
    Согласен. Сам люблю, когда необходимая информация выделена цветом. В своих скриптах пользуюсь этим.

    > Целый год ждать пришлось :-)
    Не в бровь, а в глаз! :-) Мне остаётся только посыпать голову пеплом.

    @Анонимный
    > Для bash есть bash-it
    Спасибо за ссылку.

    @Mudasobwa!
    > С oh-my-zsh обычно быстро переходят на prezto и вообще yadr.
    Интересно, чем оно зеленее и выше. Спасибо, почитаю.

    @Vasiliy Litovchenko
    > Поможет мне zsh написать sed, awk или grep?
    Конечно, чудес не бывает.

    > Какие-то размалевки консоли при путешествии между директориями?
    Размалевки к достоинствам не относятся. ZSH добавляет комфорт при путешествии в дебрях файловой системы при помощи команды cd. Это нужно попробовать. Мне приятнее выбрать название директории табом, а не писать несколько начальных символов, ожидая взаимопонимания с bash'ем.

    ОтветитьУдалить
  13. > В этом и суть oh-my-zsh. Убрать настройку, чтобы предоставить полную функциональность и «плюшки» из коробки.
    Каюсь, так и не попробовал...
    Свой первый конфиг zsh'а сочинял лет 12 назад, с тех пор он так и кочует из системы в систему с минимальными правками
    ещё в 5-й версии появился автоконфигуратор, вызвается при первой запуске или просто если убрать (переименовать) ~/.zshrc
    Если знать, что делаешь, и аккуратно ответить на все вопросы, на выходе получается отличный .zshrc
    Но ключевое слово тут - знать, что делаешь, так что для первого знакомства не очень подойдёт.
    >Размалевки к достоинствам не относятся.
    Плюс очень много. Изначально zsh вообще был чёрно-белым, и я его по сей день таким и пользую.
    > ZSH добавляет комфорт при путешествии в дебрях файловой системы при помощи команды cd
    Плюс к тому его ls позволяет в простых случаях (а их большинство) обойтись без find, например
    плюс глобальные алиасы прекрано служат интеграции zsh'а с любым пакетным менеджером типа apt, yum, zypper
    Но вообще объяснить это невозможно, хотя я неоднократно и пытался:
    http://fossbook.info/subproj/shell/1102
    http://suseana.ru/?p=838
    и ещё где-то
    zsh надо попробовать и почувствовать

    ОтветитьУдалить
  14. @alexander barakin
    > а если я понимаю руку уверенно, осознанно, и со знанием дела?
    Саша, в своё время ты доказал мне, что bash пригоден к использованию - до того я в этом очень сомневался.
    Но не будем забывать, что bash становится таким только вместе с bash-competion и readline, что проме правки ~/.bashrc нужно не забывать править и inputrc
    Ну и что с точки зрения документированности zsh равных себе не имеет, его доки можно читать просто как романы

    ОтветитьУдалить