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 комментариев: ответить

14.08.2013, 17:12   Муравей комментирует...

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

14.08.2013, 17:43   alv комментирует...

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

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

14.08.2013, 20:49   Denis Evsyukov комментирует...

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

14.08.2013, 23:29   alexander barakin комментирует...

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

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

15.08.2013, 10:10   Dmitry Koroban комментирует...

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

15.08.2013, 11:09   virens комментирует...

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

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

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

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

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

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

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

vim


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

15.08.2013, 18:37   Vlsu комментирует...

Если вы робко потянули ладонь вверх, этот пост посвящен вам
Я руку вверх не тянул, ибо уже более года использую 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)

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

15.08.2013, 19:14   Анонимный комментирует...

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

15.08.2013, 20:57   Mudasobwa! комментирует...

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

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

16.08.2013, 12:36   Vasiliy Litovchenko комментирует...

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

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

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

16.08.2013, 15:08   Anton Yakutovich комментирует...

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

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

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

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

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

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

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

16.08.2013, 15:45   Anton Yakutovich комментирует...

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

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

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

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

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

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

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

02.09.2013, 12:03   alv комментирует...

> В этом и суть 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 надо попробовать и почувствовать

02.09.2013, 12:07   alv комментирует...

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

Отправить комментарий