[О блоге] [наверх] [пред] [2018-06-24 22:29:17+03:00] [5a7662deb093bb64d1408b9415ae1557f7269a5c]
Темы: [tip][zsh]

Почему я использую zsh, а не bash или tcsh

Сегодня вспоминал причины почему же я зарёкся использовать bash и всегда
на рабочую машину ставлю zsh.

Я сидел много лет на tcsh -- отличнейший shell из которого bash много
спёр идей и всё-равно так и не дорос до его автоисправлений. Как
интерактивный shell, tcsh, на мой взгляд, лучше bash-а, не даром его в
FreeBSD делают по-умолчанию.

Я сидел много лет на bash. Не могу сказать что это не юзабельный. Вполне
себе годный shell если уже стоит (в некоторых дистрибутивах он из
коробки есть). Но предпочту не ставить его если есть mksh или tcsh (не
говоря уж о zsh).

Недостаток mksh и tcsh который часто бьёт: несовместимость. tcsh вообще
не POSIX shell -- для любого скрипта придётся запускать отдельный shell.
А скриптовать часть хочется прямо в командной строке. Находятся уроды
которые пишут именно на bash, с башизмами, не POSIX совместимые скрипты:
иногда приходится иметь дело с их скриптами и поэтому bash приходится
держать про запас для их запуска.

zsh полностью лишён всех этих недостатков и имеет массу достоинств.
Главное:

* он обратно-совместим с bash-ем. Точнее, говорят, что не везде, но я не
  встречал скриптов с башизмами которые под ним не заработали бы. То
  есть я могу держать и превосходный интерактивный shell и скриптовать в
  нём (не на каком-нибудь csh-диалекте) и запускать скрипты
* он меньше по размеру и работает быстрее -- да, можно увидеть визуально
  разницу при запуске скриптов или при работе completion системы (хотя в
  zsh там просто другая архитектура)

Есть ли что-либо чего умеет bash, но не zsh? Я не слышал о таком. В zsh
колоссальное количество плюшек для удобства (типа =() команд,
возможности автоматического tee вида ">foo >bar", ">foo | ...", итд), но
не многие их знают и пользуются. Я тоже отношусь к их числу.

Какие же killer-фичи есть лично для меня?

* shared history между разными instance-ами zsh-а. Я параллельно могу
  работать в нескольких shell-ах и у меня будет общая история между
  ними. Особо тут комментировать нечего -- безумно удобно
* встроенный autopushd -- превращает cd команду в pushd. Просто так её
  заалиасить нельзя -- много чего сломает. Для меня must-have
* очень привык к удобным алиасам включающих в себя pipe-перенаправление
* **-expansion путей до файлов. В bash только примитивная поддержка
* zmv команда, невероятно помогающая массово переименовывать файлы,
  особенно актуально для музыкальных файлов. zsh стоит поставить и
  запускать только хотя бы ради этой команды
* autocorrection, spellchecking для команды и путей к файлам. Было время
  что я использовал tcsh в первую очередь только ради этих фич, вместо
  bash. Сейчас я это всё отключил -- считаю что лучше уметь
  редактировать строку эффективно, плюс были случаи когда где-то
  опечатывался, мне суют вопрос с autocorrection, но я уже успеваю
  ввести следующую команду или ввод для ожидаемой мной: в итоге
  происходило то, чего никак не хотел

Я не проверял как работает vi-режим редактирования командной строки в
bash, но в zsh отлично, уже полтора года сижу на нём.

Список небольшой, но shell ОБЯЗАН быть удобным. Shell и текстовый
редактор это то, где проводится чуть ли не 100% времени и для чего
постоянно отдаются команды. Множество маленьких приятных мелочей zsh
перерастают в качественное удобство.

Хочу заметить что я НЕ заинтересован в возможностях zsh-а по богатому
дополнению всего и вся. 95% всех пользователей и поклонников zsh любят
его за его дополнения. Я считаю это не то что бесполезным, а скорее
вредным и развращающим. Плюс многое из completion-а требует чтения
сторонних файлов и если это происходит не мгновенно (для глаза), то
видна задержка которая лично меня выбешивает.

Очень многие любят в zsh возможности по настройке строки приглашения: и
на несколько строк и с выравниванием по правому краю -- я никогда не
видел пользы в этом, а только загромождение экрана. Мне например
нравится чтобы в строке приглашения был показан код возврата
выполнившейся команды -- в bash это можно было делать уродливым хаком, в
zsh сразу есть %? переменная: вот эти возможности prompt мне нравятся.

Сейчас вот поставил синтаксическую подсветку для zsh -- может быть это
будет ещё одна killer feature.

И я НИ капли не заинтересован в серьёзном программировании/скриптовании
на zsh (кроме плагинов/фич для использования в самом zsh). Я убеждён что
писать надо на POSIX shell, а если его не хватает, то использовать
полноценный язык программирования типа Perl, зачастую встраивающийся
даже в несколькомегабайтные сборки для домашних маршрутизаторов.

    [оставить комментарий]