Я рекомендую. — ZSH: последний шелл, который Вам когда-либо понадобится!
Чуть более месяца назад muhas рекомендомал welinux'у попробовать Z-Shell. Я попробовал, и мне понравился этот шелл. С тех пор использую только его, а в последнее время увлёкся правкой конфига — написал пару функций, добавил отображение текущей работающей программы в заголовок окна… А недавно случайно наткнулся пусть и на довольно старый, но интересный и содержательный пост о ZSH. Его перевод я и представляю вниманию честной публики.
Сначала основы: я надеюсь, большинство из вас понимают, что такое шелл. Шелл является интерфейсом между пользователем и операционной системой. Для практических нужд достаточно понимания на уровне «штука, в которой я набираю команды». Существует огромное множество шеллов; большинство *nix'ов идут с различными умолчальными оболочками. Возможно, самым популярным шеллом на сегодняшний день является GNU Bourne Again Shell, более известный как bash. Ещё одна большая семья шеллов известна как C-шеллы (csh, tcsh) — они названы так в честь их синтаксиса, похожего на C.
Примечания переводчика: спасибо sqrrl за вычитку!
Оригинал: zsh: The last shell you’ll ever need!
Автор: John Rant
Переводчик: Minoru
Введение
На прошлой неделе общеизвестный Mako вдохновил меня на попытку использовать zsh. Я начал с .zshrc, и вот, неделю спустя, я уже рассказываю о нём всем и каждому. Но давайте-ка немного вернёмся в прошлое.Сначала основы: я надеюсь, большинство из вас понимают, что такое шелл. Шелл является интерфейсом между пользователем и операционной системой. Для практических нужд достаточно понимания на уровне «штука, в которой я набираю команды». Существует огромное множество шеллов; большинство *nix'ов идут с различными умолчальными оболочками. Возможно, самым популярным шеллом на сегодняшний день является GNU Bourne Again Shell, более известный как bash. Ещё одна большая семья шеллов известна как C-шеллы (csh, tcsh) — они названы так в честь их синтаксиса, похожего на C.
Ладно, что такое zsh и почему я должен жаждать его больше, чем мой текущий шелл?
Шелл, о котором я сегодня повествую, называется Z-shell, или zsh. Zsh является развитием шелла Корна (ksh), который является развитием bash. (АПДЕЙТ: Предыдущее утверждение, как было замечено многими читателями, является неправильным. ksh существовал до bash'а, то есть bash был вдохновлён ksh'ем. Я просто прошёлся по спискам возможностей и понял, что современный ksh значительно более могуч, чем bash, тем самым доказывая именно такие отношения. Я оставлю это утверждение, потому что его изменение может «плохо выглядеть»). Это один из самых мощных шеллов, которого Вы только можете захотеть, я даже пойду дальше — я скажу, что каждый может получить что-то от использования zsh. Особенно если Вы уже привыкли к bash или дефолтному шеллу вашей ОСи, я настоятельно рекомендую Вам попробовать zsh! Что мне в нём нравится?- Ведёт себя поразительно схоже с bash. Вы можете использовать zsh точно так же, как Вы использовали bash и не учить одной вещи, и даже это будет улучшением! Совместимость со знакомыми шеллами очень важна. Переход с bash на zsh не будет похож на переход с GEdit на vim. Вы тотчас окажетесь дома, где все Ваши bash'евские сокращения и команды будут работать, как и ожидалось, но Вы также получите доступ к преимуществам zsh. Если Вы — поклонник шелл-скриптинга, Вы будете рады узнать, что синтаксис скриптов zsh также по большей части обратно совместим с bash.
- Исправление опечаток. Как часто Вы набирали что-то вроде aptg-et? Если я делаю это в zsh, я получаю сообщение, спрашивающее: «zsh: correct 'aptg-et' to 'apt-get' [nyae]?». Магия, не правда ли? Это исправление также применяется к любым параметрам, путям и именам файлов, которые Вы набираете.
- Феноменально умная система дополнения по TAB. Погодите… Я слышу, Вы что-то говорите. “Ты идиот, bash тоже может это! Тебе всего лишь нужно раскомментировать/проинсталлировать bash-completion.” Нет, это не то, что я имею в виду. Может ли Ваш bash:
— Показать предположения при помощи меню, по которому можно «ходить» «стрелочками»?
— Дополнять команду kill при помощи таблицы всех Ваших процессов?
— Дополнять aptitude или ls при помощи меню параметров с их краткими описаниями?
— Помимо прямых совпадений, показывать также близкие совпадения в отдельной секции?
— При дополнении показывать подсказки практически мгновенно даже для сложных команд, без ужасных bash'евских задержек вроде «Ох, ох, мне нужно набрать ещё пару символов!»?
Если Вы можете ответить «да» на один из этих вопросов, пожалуйста, дайте мне знать! Потому что за три года использования bash'а мой bash точно не мог этого! - Обмен историей между сессиями. Несколько одновременно запущенных сессий zsh могут обмениваться историей друг с другом вместо того, чтобы мешать друг другу. Одной из наиболее разочаровывающих вещей для пользователя bash явялется набор длинной команды и последующий её поиск при помощи ctrl+r лишь для того, чтобы найти пустоту.
- Встроенный пейджер.Я ленив. Думаю, Вы тоже. zsh поставляется с пейджером, встроенным прямо в шелл. Это значит, что Вы можете набрать что-то вроде <README и это будет эквивалентно less README или cat README | less
- Более мощный глоббинг. Глоббинг — это термин для «шаблонов на стероидах» — Ваших выражений вроде «*.c», «*Office*S03E[0-2][0-9]*.avi» и так далее. Как показывает «Введение в zsh», zsh предоставляет Вам значительно более мощные выражения. Вы будете очень редко нуждаться в использовании find или поисковой тулзой с GUI.
- Более терпимый язык скриптов. Если Вы не шелл-скриптер, Вы, наверное, не поймёте, о чём я говорю, но для вас, шелл-скриптеры, я скажу вот что: скажите «пока» всем эти bash'евским извращениям. Сколько раз Вы сталкивались с ошибкой в выражении вроде [ $FOO = $BAR ] из-за того, что FOO или BAR были пусты, и Вам приходилось прибегать к глупым уловкам вроде [ x$FOO = x$BAR ]? В общем, zsh спасёт Вас от этого при помощи выражений с двойными квадратными скобками. [[ $FOO = $BAR ]] всегда будет работать, а [[ $FOO && $BAR ]] выглядит значительно более естественно, чем [ $FOO -a $BAR ]. Я не могу показать Вам и сотой части мощи zsh в области программирования, но я призываю Вас дать ему шанс!
- Многое другое. Не забывайте, я тоже начинающий. Я только сбил верхушку айсберга. Консультируйтесь с прекрасной документацией zsh (я дам ссылку на неё чуть позже), чтобы узнать о zsh всё, что хотите.
Ладно, Вы меня убедили. Как мне начать использовать zsh?
Отлично! Рад, что Вы решили дать ему шанс. К сожалению, zsh не станет делать всего того, что я описал выше, сразу же после установки. Он даже немного безвкусен в дефолтном состоянии. Два года назад я, услышав кое-что о zsh, поставил его и попробовал «зажечь»; первой мыслью было «Что за говнянистая вещь? Тут нету даже дополнения по tab! Я возвращаюсь на bash.» Для того, чтобы заставить zsh делать магические вещи, Вам следует отконфигурировать его при помощи файла с именем .zshrc. Это аналог bash'евского .bashrc или .cshrc для csh (который, кстати, не является городом в Боснии). Большинство людей добывают этот файл, погуглив «zshrc» и используя чужой конфиг к качестве примера. Ну, некоторые из штуковин, используемых в моих zshrc, я тоже нагуглил или взял из конфига Mako, так что я ни в коем случае не претендую на права на эти решения. Ладно, начнём:- Установите zsh с помощью средств своего дистрибутива. По возможности Вам следует использовать пакетный менеджер (yum, apt-get, Synaptic, Portage, fink — Вам видне), потому что zsh с высокой вероятностью уже присутствует в Вашем дистрибутиве в виде пакета. Вообще-то пакетов два — zsh и zsh-devel или zsh-beta. Бетапакет новее и содержит больше возможностей и разработок, но также может содержать баги. Лично я использую беты, там пока что есть проблемы, но выбор зависит только от Вас. Оба варианта работают отлично.
- Найдите zshrc. Вы можете погуглить и составить свой, или начать с моих:
— Linux: Это стандартный zshrc, который я использую на моих Linux машинах. Я юзаю Ubuntu, но я не помещал в конфиг никаких дистроспецифичных вещей.
— Mac OS X: Почти идентичен варианту для Linux, исключая фиксы режима кнопок delete, Page Up, Page Down, Home и End, а также специальную цветовую схему — чёрный текст на белом фоне — для приглашения командной строки (лично я считаю, что она хорошо смотрится на моём макбуке)
Этот файл должен быть сохранён в ~/.zshrc; то есть это файл с именем «.zshrc» в Вашей домашней директории. - Наслаждайтесь, читайте документацию, настраивайте так, как Вашей душе угодно! Пожалуйста, сходите на домашнюю страницу zsh и почитайте тамошние доки о советах и уловках. Я новичок с zsh — я не могу научить Вас многому, потому что я сам пока что только учусь.
Дополнительные источники информации
Если Вам понравилась идея, но у Вас вопросов ещё больше, чем было, пожалуйста, загляните на эти чудесные сайты:- Домашняя страница zsh. Тут Вы сможете найти ссылки на другие замечательные ресурсы.
- Введение в zsh. Действительно быстрочитающаяся вещь, которая даст Вам хороший обзор возможностей zsh.
- Руководство по zsh. Более крупное, но почти всеобъемлющее руководство по zsh с точки зрения пользователя.
- Мануал по zsh. Действительно огромный мануал, который охватывает всё, что Вы захотите знать о zsh. Особенно если Вы шелл-скриптер — Вам нужен именно этот!
- Шпаргалка по zsh. Для ленивых и нетерпеливых! (однако она верхней стороной вниз… сожалею, но это не моя ошибка!)
- zsh FAQ. Отлично подходит для вопросов вроде «Хм, а почему zsh делает А и Б не так, как мой бывший шелл?»
- zsh Wiki. Документация, советы и уловки, zshrc, расширения и аддоны, поддерживаемые и развиваемые сообществом.
Примечания переводчика: спасибо sqrrl за вычитку!