Rate this post

Когда мы говорим о программировании, основанном на UNIX, обычно имеются в виду консоли, терминалы и интерфейсы командной строки. Самая распространённая командная оболочка – это Bash, но есть также и другие доступные и широко используемые варианты, например Z Shell или zsh.

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

Z Shell vs Bash
Z Shell vs Bash

Оглавление

Z Shell

Zsh, или Z Shell впервые выпустил Paul Falstad (Пол Фалстад) в 1990 году, когда он ещё был студентом Принстонского университета. Z Shell входит во многие операционные системы, в том числе и в Mac OS (хотя она там не установлена по умолчанию).

Подобно Bash, Z Shell можно в общем рассматривать как расширенную версию Bourne Shell, и она содержит много черт, сходных с Bash, что вы сможете заметить ниже. Также можно видеть, что она довольно сильно напоминает Korn Shell. Некоторые возможности, о которых стоит упомянуть (но не все):

  • Шаблоны поиска файлов
  • Исправление правописания
  • Краткие имена директорий (например, ~ или ..)
  • Загружаемые модули, наподобие контроля сокетов или FTP клиента
  • Режимы совместимости (например, вы можете использовать /bin/bash как замену Bash)
  • Скрипты запуска/выключения через zshenv, zprofile, zshrc, zlogin и zlogout
  • Завершение команд git
  • Расширение путей: например, введите cd /u/lo/b, нажмите Tab, и путь будет завершён в виде cd /usr/local/bin, поскольку это единственный подходящий путь.

Их гораздо больше, чем мы здесь показали, но по крайней мере это даёт нам понять, что оболочки могут быть разными.

Bash

Оболочка Bash (также известная как “Bourne-again shell” – “снова оболочка Борна” или “рождённая вновь оболочка”) была выпущена примерно в то же время, что и Z Shell (в 1989 году), её создателем считается Brian Fox (Брайан Фокс). Она была изначально написана как замена Bourne Shell. Через несколько лет она стала основной оболочкой для GNU, большинства дистрибутивов Linux и Mac OS (версии 10.3+). Как и положено настоящему последователю, Bash способен без проблем исполнять все команды Bourne Shell.

Вот несколько особенностей, которыми обладает оболочка Bash, включая и менее известные:

  • Вставка заключилельных параметров предыдущей команды в текущую, используя Alt + .
  • Вы можете продолжать исполнять процесс даже после выхода. Чтобы это сделать, воспользуйтесь командой disown -h <pid>, где вместо <pid> нужно указать номер процесса.
  • Вновь запустить предыдущую команду через sudo, применяя sudo !! (!! — это обозначение для предшествующей команды).
  • Выполнить обратный инкрементальный поиск с помощью клавиш Ctrl + R.
  • Нажмите клавишу Tab дважды, и вы получите список возможных дополнений для слова, которое вы только что ввели или вводите.
  • Когда исполняете скрипт в Bash, опция -x выведет его содержимое, как при запуске.

Если вы хотите изучить больше, то можете увидеть более подробный список возможностей Bash здесь.

Сравнение Z Shell и Bash

Теперь, когда мы вкратце представили вам обе оболочки, давайте посмотрим, как они ведут себя в сравнении.

Первое, на что мы взглянем (и это один из наиболее значительных аспектов, на мой взгляд) – это популярность оболочки. Хотя у Z Shell имеется ряд пользователей в среде разработчиков, обычно безопаснее писать свои скрипты для Bash, поскольку гораздо больше людей способны запустить эти скрипты.

Важность всего этого заключается в адаптации скриптов для общедоступных репозиториев, а также в возможности написать грамотную документацию. Благодаря своему большому сообществу для Bash есть несколько крупных ресурсов, которые смогут помочь вам разобраться, как её использовать.

Так что, если вы собираетесь писать скрипт, который легко будет запускать множество разработчиков, то я рекомендую вам Bash. Хотя это не должно помешать вам использовать Z Shell там, где она более применима для ваших целей. Найти верное решение задачи гораздо важнее, чем взять то, что популярно, так что имейте это в виду.

Хотя Bash куда более распространён, это не означает, что у Z Shell нет полезных возможностей. Её часто хвалят за интерактивную работу, поскольку она лучше настраивается, чем Bash. Например, командная строка более гибкая. Можно отобразить команду слева, а другую справа, как в разделённом экране vim. Автодополнение также быстрее и более изменяемое, чем в Bash.

И все же

Чтобы дать вам лучше понять набор отличительных черт Z Shell, вот список того, что вы получите, используя Z Shell вместо Bash:

  • Встроенная команда zmv поможет вам массово переименовать файлы/директории, например, чтобы добавить ‘.txt’ к имени каждого файла, запустите zmv –C '(*)(#q.)' '$1.txt'.
  • Утилита zcalc — это замечательный калькулятор командной строки, это удобный способ считать быстро, не покидая терминал. Загрузите её через autoload -Uz zcalc и запустите командой zcalc.
  • Команда zparseopts — это однострочник, который поможет вам разобрать сложные варианты, которые предоставляются вашему скрипту(?)
  • Команда autopushd позволяет вам делать popd после того, как вы с помощью cd, чтобы вернуться в предыдущую директорию.
  • Поддержка чисел с плавающей точкой (коей Bash, к удивлению, не содержит).
  • Поддержка для структур данных “хэш”.

Есть также ряд особенностей, которые присутствуют в Bash, но их нет почти во всех остальных командных оболочках. Вот также некоторые из них:

  • Опция командной строки –norc, которая позволяет пользователю иметь дело с инициализацией командной строки, не читая файл .bashrc
  • Использование опции –rcfile <filename> с bash позволяет вам исполнять команды из определённого файла.
  • Отличные возможности вызова (набор опций для командной строки)
  • Может быть вызвана командой sh
  • Bash можно запустить в определённом режиме POSIX.  Применитеset –o posix, чтобы включить режим, или ––posix при запуске.
  • Вы можете управлять видом командной строки в Bash. Настройка переменной PROMPT_COMMAND с одним или более специальными символами настроит её за вас.
  • Bash также можно включить в режиме ограниченной оболочкиrbash или --restricted), это означает, что некоторые команды/действия больше не будут доступны:
    • Настройка и удаление значений служебных переменных SHELL, PATH, ENVBASH_ENV
    • Перенаправление вывода с использованием операторов ‘>’, ‘>|’, ‘<>’, ‘>&’, ‘&>’, ‘>>’
    • Разбор значений SHELLOPTS из окружения оболочки при запуске
    • Использование встроенного оператора exec, чтобы заменить оболочку другой командой
    • И многое другое

Сложно сказать, какая за оболочек на самом деле лучше. Это зависит от ваших личных предпочтений и от того, что вы хотите делать с оболочкой. В случае Z Shell и Bash ни одна из них не лучше другой.

В сообществе разработчиков есть несколько фанатов Z Shell, которе отстаивают её из-за многих полезных вещей, которыми она обладает. Но ещё больше любителей Bash, знающих, что её самое большое преимущество – это более обширная пользовательская база. Легко видеть, почему пользователям так трудно перейти с Z Shell на Bash и наоборот.

Изучайте больше

Куда двигаться дальше? Есть много деталей, которые нужно знать в совершенстве, чтобы изучить shell-скрипты. Если вы хотите знать больше, я бы предложил пройти курс BASH Programming Course: Master the Linux Command Line, который научит вас всему, что вам требуется знать о составлении скриптов (особенно на Bash), начиная с основных понятий и заканчивая продвинутыми темами.

Надеюсь, что теперь вы понимаете, чем различаются Z Shell и Bash и в чём их сходства. Существует несколько ресурсов, посвящённых обеим оболочкам, так что вам не составит труда найти больше информации по каждой из них.

Какую из оболочек вы предпочитаете и почему? Сообщите об этом в комментариях!

ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here