Zsh vs Bash

Когда мы говорим о программировании на основе UNIX, обычно речь идет об оболочках, терминалах и интерфейсах командной строки. Наиболее распространенной оболочкой в этом отношении является Bash [https://en.wikipedia.org/wiki/Bash_(Unix_shell)], но есть и другие доступные и широко используемые варианты, такие как Zsh или оболочка Z [https: // en.wikipedia.org/wiki/Z_shell]. В этой статье мы попытаемся провести границу между двумя оболочками и показать различия, чтобы вы могли понять, почему вы можете использовать одну или другие оболочки.

Когда мы говорим о программировании на основе UNIX, обычно речь идет об оболочках, терминалах и интерфейсах командной строки. Наиболее распространенной оболочкой в этом отношении является Bash, но есть и другие доступные и широко используемые варианты, такие как Zsh или Z-оболочка .

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

Z Shell

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

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

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

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

Баш

Оболочка Bash (также известная как «оболочка Bourne-Again») также была выпущена примерно в то же время, что и оболочка Z (в 1989 году), и Брайан Фокс считается ее создателем. Первоначально он был написан как замена оболочки Борна. В течение многих лет он поставлялся как оболочка по умолчанию для GNU, большинства дистрибутивов Linux и Mac OS X (версия 10.3+). Как и положено настоящей замене, Bash способен без проблем выполнять все команды оболочки Bourne.

Оболочка Bash имеет довольно много функций, и некоторые из менее известных включают в себя:

  • Вставьте последний параметр (ы) предыдущей команды в вашу текущую команду, используя Alt + .
  • Вы можете продолжать процесс даже после выхода из системы. Для этого используйте команду disown -h <pid> где вам нужно будет поместить идентификатор процесса (PID) программы вместо <pid>
  • Снова выполните предыдущую команду, но на этот раз с sudo используя команду sudo !! ( !! - сокращение от 'предыдущей команды')
  • Выполните обратный инкрементный поиск с помощью Ctrl + R
  • Дважды нажмите вкладку, и вы увидите список завершений для слова, которое вы только что набрали или набираете.
  • При выполнении сценария с помощью bash используйте параметр -x для вывода содержимого сценария по мере его выполнения.

Если вы хотите узнать больше, вы можете увидеть гораздо больше список Баш-специфических особенностей здесь .

Сравнение оболочки Z и Bash

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

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

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

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

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

Чтобы вы лучше понимали, какие функции имеет Z-оболочка, вот список вещей, к которым у вас будет доступ при использовании Z-оболочки поверх Bash:

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

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

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

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

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

Учить больше

Итак, куда вы идете отсюда? При обучении написанию сценариев оболочки необходимо освоить множество деталей. Если вы хотите узнать больше, я бы посоветовал пройти такой курс, как Курс программирования BASH: освоите командную строку Linux{.udemy-link} , который научит вас практически всему, что вам нужно знать о сценариях (особенно в Bash), начиная с концепций для начинающих и продвигается к продвинутым темам.

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

Какую оболочку вы предпочитаете и почему? Напишите нам в комментариях!

comments powered by Disqus