5 укажите кратко основные отличия командной оболочки zsh от bash

Обновлено: 08.07.2024

Zsh не такая уж и новая оболочка, первая версия появилась еще в 1990 году. С историей и основными особенностями можно познакомиться в русской или английской википедии.

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

Автодополнение для cd

Наберем в баш cd и нажмем таб.

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

Теперь наберем cd в zsh и нажмем таб.

В строку ввода подставилось первое значение из списка. Нажимаем таб еще раз.

Подставилось второе значение из списка! Удобно.

Автодополнение для команд на примере git

Введем в баш git и нажмем таб.

Никакой помощи не появилось. Только отображаются файлы данной директории.

Проделаем ту же операцию в zsh.

Отобразился список команд с описанием. Это гораздо информативнее.

Да, установив пакет bash-completion, подобное поведение появится и в баше. Но выводить информацию как в zsh не получится:

  • Не будет итерации по значениям, как в пункте про cd ;
  • Не будет справочной информации, только список значений.

Раскрытие полного пути

Zsh поддерживает раскрытие полного пути на основе неполных данных. Введем шаблон пути:

Путь до директории полностью раскрылся. Не пришлось вводить лишних символов.

Но что, если заданному пути соответствует несколько путей? Введем cd u/l/g и нажмем таб.

Путь раскрылся до возникновения неопределенности. Нажимаем таб еще раз, и перед нами предстанет выбор папки.

Выбираем табом нужную папку. Последующее нажатие таба раскроет задуманный путь до конца.

Замена пути

Zsh поддерживает замену части пути. Рассмотрим на примере. Введем cd /usr/local/bin . Но подождите, я хотел cd /usr/local/share ! Не проблема, вводим команду cd bin share и получаем заветный путь:

Возможно, это не самый убедительный пример. Того же эффекта можно достичь просто написав cd ../share . Но рассмотрим следующий случай:

B баш тут бы пришлось изрядно постараться ( cd ../../../ ).

Псевдонимы

Обычные псевдонимы задаются так:

В zsh существует еще 2 типа псевдонима.

Первый — глобальный (global). Может вызываться в любом месте команды. Задается ключом -g .

В примере, вместо написания | grep -i , в середине выражения, использовался псевдоним gp . Удобно.

Второй тип — суффиксный (suffix). Указывает в каком приложении открывать файл, основываясь на расширении. Задается ключом -s .

Правая строка

Zsh позволяет настроить правую строку приглашения. Туда можно выводить текущую дату, состояние ветки в git и многое другое. Иллюстрация из книги Pro Git:

Поиск в истории по подстроке

Одна из самых кайфовых вещей, которую позволяет делать zsh. (Включается плагином, history-substring-search в oh-my-zsh, о котором ниже).

Например, вводим git pu и нажимаем стрелку вверх.

Получили последний запрос, который соответствует введенному шаблону. Дальнейшие нажатия будут выводить следующий результат. Удобно, что для поиска совершаются минимальные действия.

oh-my-zsh

Фреймворк для легкой настройки и установки плагинов и тем оформления. Содержит в себе уже более 200 плагинов. Проект доступен на github.

Плагины которыми я пользуюсь:

  • git — добавляет много полезных сокращений для команд гита.
  • colored-man-pages — добавляет подсветку на man страницы
  • command-not-found — подсказывает название команды, если она напечатана с ошибкой
  • bwana — позволяет открывать man страницы в браузере
  • sublime — псевдонимы для вызова sublime text
  • history — псевдонимы для истории команд и поиска по ним
  • history-substring-search — реализация поиска в истории по подстроке
  • docker — помощь для команд докера.

Вид популярной темы для zsh:

Заключение

Оригинал: What's the Difference Between Bash, Zsh, and Other Linux Shells?
Автор: Yatri Trivedi
Дата публикации: 22 июля 2011 г.
Перевод: А.Панин
Дата перевода: 10 ноября 2016 г.

Мы занялись рассмотрением вопросов, связанных с созданием сценариев командной оболочки, так как Linux может работать практически на любом устройстве. Это возможно, в том числе, благодаря гибкости используемых командных оболочек, но в чем различие между этими командными оболочками и из-за чего люди выбирают ту или иную командную оболочку?

Каково предназначение командных оболочек?

Интерфейс командной строки системы является поистине любопытным. Изначально рассматриваемый как интерфейс для самых опытных пользователей, он прошел огромный путь, в некоторой степени потеряв свою актуальность. Хотя вы все еще можете считать его очень удобным и постоянно работать с ним, на сегодняшний день он используется главным образом энтузиастами, у которых есть время на его доскональное изучение. При этом этот интерфейс будет иметь отличия в каждой из существующих операционных систем, так как каждая из этих систем по своему интерпретирует команды. На сегодняшний день это утверждение актуально для таких операционных систем, как Linux, OS X и Windows, но ранее оно было актуально для систем большинства компьютеров.


(Иллюстрация от пользователя blakespot )

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

Почему существует так много командных оболочек?

Командные оболочки, доступные для установки в одном из дистрибутивов Linux

Наиболее известным предком современных командных оболочек является командная оболочка Bourne Shell, известная, как "sh" и названная в честь ее создателя Стивена Борна (Stephen Bourne) из компании AT&T. Она стала стандартным интерпретатором команд в Unix благодаря поддержке механизма подстановки команд, программных каналов, переменных, условных инструкций, циклов, а также других возможностей. В то время создание сценариев командной оболочки стало поистине популярным занятием, чего, по мнению многих людей, не скажешь сегодня. При этом она не предоставляла пользователям специальных механизмов тонкой настройки в соответствии с их потребностями, таких, как псевдонимы и автозавершение команд, а также функции (хотя последний механизм был добавлен спустя некоторое время).

Командная оболочка C shell ("csh") была разработана Билом Джоем из UCB и значительно изменила подход к использованию интерфейса командной строки системы. В нее было добавлено множество интерактивных элементов, которые могли применяться пользователями для управления их системами, таких, как псевдонимы команд (сокращения длинных команд), функции управления задачами, история команд и других. Она была смоделирована по образу и подобию языка программирования C, что было интересной идеей, так как для разработки самой операционной системы Unix также использовался язык C. Разумеется, для того, чтобы продуктивно работать с ней, пользователям Bourne Shell нужно было учить язык C, так как команды соответствовали его стандартным функциям. Кроме того, данная командная оболочка содержала поистине огромное количество ошибок, которые приходилось исправлять как пользователям, так и разработчикам в течение длительного промежутка времени. В конце концов пользователи начали использовать командную оболочку Bourne Shell для исполнения сценариев ввиду того, что она лучше обрабатывала неинтерактивные команды, а командую оболочку C shell - для выполнения всех остальных задач.

Командная оболочка bash

Еще одним ответом на некачественные коммерческие реализации командной оболочки csh был стандарт интерфейса переносимой операционной системы (Portable Operating System Interface или POSIX). Это была успешная попытка создания стандарта, описывающего процесс интерпретации команд (помимо других вещей), который в конце концов вобрал в себя множество возможностей командной оболочки Korn shell. В то же время, в рамках недавно созданного проекта GNU была предпринята попытка создания свободной, полностью совместимой с Unix операционной системы. В рамках этого проекта была начата разработка новой командной оболочки Bourne Again shell с реализациями многих функций из таких командных оболочек, как sh, csh и ksh. Результат этой инициативы оказался довольно впечатляющим.

Кеннет Алмкист создал POSIX-совместимый клон командной оболочки Bourne shell под названием "ash", который впоследствии стал стандартной командной оболочкой BSD, еще одного ответвления/клона Unix. Уникальность данной командной оболочки заключается в ее реальной легковесности и именно поэтому она снискала особую популярность в мире встраиваемых Linux-систем. Если у вас есть телефон на базе Android с правами root, вы можете обнаружить в нем набор утилит BusyBox, в котором используется код из ash. Разработчики дистрибутива Debian создали клон командной оболочки ash под названием "dash".

Командная оболочка zsh

(Иллюстрация от пользователя othree )

Одной из самых известных командных оболочек "новой волны" является командная оболочка "zsh", разработанная Полом Фалстадом в 1990 году. Это командная оболочка, поддерживающая синтаксис командной оболочки Bourne shell с возможностями командной оболочки bash и других бывших популярными ранее командных оболочек, а также с собственными дополнительными полезными возможностями. Она осуществляет проверку синтаксиса, позволяет отслеживать события вход/выхода из системы, поддерживает функцию интерпретации байткода и научную нотацию, позволяет работать с числами с плавающей точкой и так далее. Другой подобной командной оболочкой является Friendly Interactive Shell "fish", которая поддерживает команды, которые легко запомнить и использовать.

В общем, большинство командных оболочек является клонами существовавших ранее командных оболочек с дополнительными функциями, исправлениями ошибок и более либеральными лицензиями. Основными исключениями из данного правила являются оригинальные командные оболочки Bourne shell и C shell, а также командные оболочки rc shell и ash, которые не являются полностью оригинальными, но находят своего пользователя.

Какую командную оболочку следует использовать?

Командная оболочка fish

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

Командная оболочка Bash является самой широко используемой командной оболочкой и поставляется по умолчанию в большинстве дистрибутивов Linux. Она действительно удобна и имеет огромное количество возможностей, большая часть из которых даже не будет использоваться вами, по крайней мере, если вы не будете разрабатывать сценарии командной оболочки, поэтому можно с уверенностью заявить, что вам стоит выбрать ее. Ввиду того, что она является самой популярной, она отлично подходит для разработки сценариев командной оболочки, которые будут использоваться на других платформах. Если же вы хотите попробовать какую-либо другую, более дружелюбную командную оболочку, вы можете установить fish.

Если вы постоянно имеете дело с встраиваемыми Linux-системами, например, устанавливая Linux на такие экзотические устройства, как Nintendo DS или вам очень нравится дистрибутив Debian, вам наверняка лучше подойдут командные оболочки ash/dash. И снова напомню о том, что данные командные оболочки работают практически так же, как и все остальные, но ввиду их легковесности, они могут не поддерживать некоторые сложные функции.

DSLinux

(Иллюстрация от пользователя renrutal )

Если вы планируете изучать вопросы создания сценариев командной оболочки, вам придется потратить чуть больше времени на выбор командной оболочки. Командная оболочка Bash также является отличным выбором, но я знаю достаточно людей, которые перешли на Zsh из-за ее дополнительных функций. Я считаю, что выбор на самом деле зависит от сложности ваших будущих проектов и типов функций, которые вы хотели бы получить от командной оболочки. Некоторые люди используют командную оболочку tcsh по той причине, что они знают язык программирования C, регулярно используют его и им проще работать с ним, в том числе, в рамках сценариев. Если вы не уверены в том, какую командную оболочку следует выбрать, вы наверняка не имеете большого опыта в области разработки программных продуктов, поэтому вам стоит выбирать ту командную оболочку, которая будет лучше подходить для изучения интересных вам технологий и потратить дополнительное время на исследование функций всех командных оболочек.

Вы можете без каких-либо сложностей устанавливать и удалять различные командные с помощью центра приложений Ubuntu или менеджера пакетов программного обеспечения вашего любимого дистрибутива. Бинарные файлы командных оболочек размещаются в директории /bin/ и в том случае, если вы используете современный дистрибутив Linux, вы можете без каких-либо проблем изменять используемую по умолчанию командную оболочку. Просто введите следующую команду:

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

Изменение стандартной командной оболочки системы

В квадратных скобках приведен путь к бинарному файлу текущей командной оболочки и если она устраивает вас, вы можете просто нажать клавишу Enter.

Вы используете командную оболочку Bash? Вам нравится другая командная оболочка? Какую из ее возможностей вы используете чаще всего? Поделитесь своим мнением в разделе комментариев!

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

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

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

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

  • Вставка заключилельных параметров предыдущей команды в текущую, используя Alt + .
  • Вы можете продолжать исполнять процесс даже после выхода. Чтобы это сделать, воспользуйтесь командой disown -h

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

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

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

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

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

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

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

И все же

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

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

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

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


    Большинство дистрибутивов Linux включают оболочку bash по умолчанию, но вы также можете переключиться на другую оболочку. Zsh является особенно популярной альтернативой, и есть другие оболочки, такие как пепел, тире, рыба и тсш. Но какая разница, и почему их так много?

    Что делают снаряды?

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

    Первой средой оболочки была оболочка Thompson, разработанная в Bell Labs и выпущенная в 1971 году. С тех пор среды оболочки основывались на этой концепции, добавляя множество новых функций, функциональных возможностей и улучшений скорости.

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

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

    Оболочки, ведущие к Башу: sh, csh, tsh и ksh


    Рождение Баш


    Bash был улучшен за десятилетия с момента его первого выпуска в 1989 году, но он по-прежнему является оболочкой по умолчанию в большинстве дистрибутивов Linux сегодня. Это также оболочка по умолчанию для MacOS от Apple, и она доступна для установки на Microsoft Windows 10 .

    Новые оболочки: пепел, тире, зш и рыба

    Хотя с тех пор сообщество Linux остановилось на Bash, разработчики не прекратили создавать новые оболочки, когда Bash был впервые выпущен 28 лет назад.




    Что выбрать? (и почему Zsh популярен)

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

    На встроенных системах Linux или BSD вы получите оболочку Ash. Но пепел — это оболочка на основе Борна, и он в значительной степени совместим с Башом. Любые знания об использовании bash будут перенесены на использование оболочки ash или dash, хотя некоторые расширенные функции сценариев недоступны в этой облегченной оболочке.

    Почти каждая оболочка, с которой вы столкнетесь, основана на Bourne и работает аналогично, включая zsh.

    Вот почему Zsh популярен. Эта новая оболочка совместима с bash, но включает в себя больше возможностей. Оболочка zsh предлагает встроенную коррекцию орфографии, улучшенное завершение командной строки, загружаемые модули, которые выступают в качестве плагинов для вашей оболочки, глобальные псевдонимы, которые позволяют использовать псевдонимы имен файлов или чего-либо еще в командной строке вместо просто команд, и больше поддержки тем. Это похоже на bash, но с множеством дополнительных возможностей, дополнительных функций и настраиваемых параметров, которые вы могли бы оценить, если бы вы проводили много времени в командной строке.

    Если вы знакомы с bash, вы можете переключиться на zsh, не изучая другой синтаксис — вы просто получите дополнительные функции. если вы знакомы с zsh, вы можете переключиться на bash, не изучая другой синтаксис — у вас просто не будет доступа к этим функциям.


    Есть и другие снаряды. Например, оболочка tcsh все еще существует и является опцией. FreeBSD использует tsch в качестве корневой оболочки по умолчанию и ash в качестве интерактивной оболочки по умолчанию. Если вы регулярно пользуетесь программированием на C, для вас лучше подойдет tsch. Тем не менее, он далеко не так часто используется, как bash или zsh.

    Как переключаться между оболочками

    Легко переключиться на новую оболочку, чтобы попробовать ее. Просто установите оболочку из диспетчера пакетов вашего дистрибутива Linux и введите команду для запуска оболочки.

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


    Чтобы использовать эту команду, вам сначала нужно найти полный путь к вашей оболочке с помощью команды which. Например, скажем, мы хотели перейти на оболочку zsh. Мы запустили следующую команду:

    В Ubuntu это говорит нам о том, что двоичный файл zsh хранится в / usr / bin / zsh.

    Запустите следующую команду, введите свой пароль, и вам будет предложено выбрать новую оболочку входа в систему:

    В соответствии с приведенной выше командой мы вводим /usr/bin/zsh . Оболочка zsh будет тогда нашей по умолчанию, пока мы не chsh команду chsh и не chsh ее обратно.

    Читайте также: