Чем отличается bash от zsh
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:
Заключение
Я не сомневаюсь, что многое из написанного можно достигнуть с помощью различных плагинов и скриптов для баша. Но зачем если есть хорошее решение «из коробки». Которое работает, и работает очень хорошо.
zsh и bash: что выбрать
Для тех, кто ещё не знаком с Z Shell, а так же тем, кто находится на распутье в выборе шелла для повседневных задач, посвящается эта заметка.
Надо сказать, о преимуществах zsh написано уже достаточно много материалов. Что касается этой скромной заметки, она призвана показать читателю возможности обеих оболочек на конкретных примерах конфигурационных файлов. Упор сделан таки на zsh, ибо в понимании автора bash, как правило, пригоден к использованию изначально, zsh без собственных настроек лучше не использовать вовсе.
Полные конфигурационные файлы автора можно забрать с github.
I. Лучшее в shell — автодополнение
Автодополнение есть и в bash, этим в наше время никого не удивишь. Особенно хорош в этом смысле bash-completion, который позволяет дополнять не только пути к каталогам, но и эффективно искать пакеты для установки. Если вы ранее не использовали его, мой вам совет: обязательно установите. Дополнительных настроек для работы этого пакета не требуется.
Zsh может удивить вас, это действительно так. Пожалуй, автодополнение — одна из его сильнейших сторон. Сразу же нужно отметить тот факт, что zsh является модульным и для расширения его возможностей необходимо подключить или в некоторых случаях установить нужные модули. Кроме того, без индивидуальной настройки в zsh не обойтись: модули нужно будет включить в ваш .zshrc. Обратимся к практическим примерам.
Для ArchLinux лучше сразу установить пакеты, подобные bash-completion, что позволит использовать автодополнение в поиске пакетов с pacman и AUR: это zsh-yaourt и zsh-packer. Найти их можно в том же AUR. Подключим наше автодополнение:
Уже неплохо, верно? Честно сказать, меня не прельщала перспектива перехода на zsh, поскольку в целом устраивал и bash. Но эксперимент показал: zsh — это очень удобно.
II. Горячие клавиши
Насколько мне известно, в bash горячие клавиши изменению не подлежат. Впрочем, не исключено, что я ошибаюсь. Это известные всем линуксоидам клавиши редактора emacs. Они взяты за основу и будут работать на любой машине, где установлен bash. Конечно, никто не запретит вам использовать стрелки для перемещения между символами или клавишу delete для удаления символа — это тоже есть в bash, и это тоже не нужно настраивать.
Обратимся к zsh. Да, как вы уже, наверное, догадались: в zsh всё нужно настроить под себя. Разумеется, было бы жутко, если бы нам пришлось настраивать каждую клавишу — вовсе нет! Можно выбрать один из двух стилей, ориентируясь на более привычный вам: режим vi или режим emacs.
Рекомендация: выбирайте emasc, чтобы уверенно пользоваться горячими клавишами на любой машине с любым shell’ом, кроме того, наиболее популярен всё таки bash — ориентируйтесь на него.
Разумеется, можно настроить отдельные сочетания клавиш так, как вам нравится.
Пример:
III. Алиасы
Очень удобно бывает использовать алиасы различных команд. Алиасы замечательно настраиваются как в bash, так и в zsh. Отличие в том, что в zsh можно использовать не только команды, но и назначить расширения типов файлов для отдельных приложений. Чем это полезно? Благодаря этой возможности zsh может заменить вам даже файловый менеджер. Смотрите сами:
Обратите внимание на строки, начинающиеся с alias -s. Теперь представьте: вы находитесь в директории с документами и среди них есть один или несколько с расширением .html. Что мы делаем обычно? Запускаем браузер, жмём Ctrl+O, выбираем файл и просматриваем его. Что позволяют сделать алиасы в zsh? Просто напишите название документа и он тут же будет открыт в браузере.
Для этого сначала подгружается отдельный модуль pick-web-browser
IV. История команд
И уж, конечно, ни один пользователь не оспорит удобство использования истории команд. Здесь zsh ничем особенным не отличается от bash. Настроим его:
V. Прочие удобства
Для zsh есть одна прелюбопытнейшая вещь: плагин zsh-syntax-highlighting. Пользователи ArchLinux могут установить его из AUR, остальные — скачать из одноимённого проекта на github. Поставьте его, и ваш эмулятор терминала заиграет новыми красками.
Изначально он ориентирован на любые терминалы — не только поддерживающие 256 цветов, поэтому некоторые цвета могут выглядеть не так, как нам нравится, но это можно исправить. Главный файл с настройками цветов располагается по пути:
/usr/share/zsh/plugins/zsh-syntax-highlight/highlighters/main/main-highlighter.zsh. Но править непосредственно его нет нужды (спаибо, ZyXI за указание на ошибку).
Измените цвета так, как вам нужно в .zshrc и активируйте плагин.
Пример:
Также в zsh имеется очень популярный способ запаковки/распаковки архивов. Введите команду extract myfile.tar — распакуете архив, введите команду pk tar myfile — запакуете файл в архив указанного формата. Выходит, zsh может заменить архиватор?
Для распаковки впишем в .zhsrc:
Для создания архивов:
VI. Итоги
Zsh очень удобен для повседневной работы и делает добрую половину рутины за вас. Но стоит обратить внимание на различия между этими двумя оболочками. Например, в zsh после for обязательно вставлять пробел, нумерация массивов в zsh начинается с 1, чего совершенно невозможно понять.
Так, если вы используете shell для повседневной работы, исключающей написание скриптов, используйте zsh. Если вам часто приходится писать свои скрипты, только bash! Впрочем, можно комбинировать.
Как установить zsh в качестве оболочки по-умолчанию для отдельного пользователя:
Что такое ZSH и почему его следует попробовать в качестве альтернативы Bash?
ZSH, также называемая оболочкой Z, является расширенной версией Bourne Shell (sh) с множеством новых функций и поддержкой плагинов и тем. Поскольку она основана на той же оболочке, что и Bash, ZSH имеет многие из тех же функций, и переключиться на него очень просто.
Чем ZSH лучше Bash?
У ZSH слишком много функций, чтобы перечислять их здесь, часть из них — лишь незначительные улучшения в Bash, но вот некоторые из основных:
- Автоматический cd: просто введите имя каталога
- Рекурсивное расширение пути: например, «/u/lo/b» заменяется на «/usr/local/bin»
- Исправление орфографии и приблизительное завершение: если вы допустили незначительную ошибку при вводе имени каталога, ZSH исправит её за вас.
- Поддержка плагинов и тем: ZSH включает множество различных фреймворков плагинов.
Поддержка плагинов и тем, вероятно, самая крутая функция ZSH, и на этом мы сосредоточимся здесь.
Установка ZSH
macOS
перед установкой из Homebrew. Если он новее 4.3.9, возможно, всё будет в порядке. Желательно новее или равно 5.0.
Чтобы установить zsh в качестве оболочки по умолчанию, выполните следующие действия, предполагая, что по умолчанию установлена Homebrew.
Последние версии Mac OS:
Mac OS High Sierra и более ранние версии:
Предполагая, что у вас установлен Homebrew. В противном случае большинство версий macOS по умолчанию поставляют zsh, но обычно это более старая версия. В качестве альтернативы вы также можете использовать MacPorts
Ubuntu, Debian и производные (Windows 10 WSL | Собственное ядро Linux с Windows 10 build 1903, Kali Linux, Linux Mint, elementary OS, Zorin OS, Raspbian, MX Linux, Deepin)
OpenSUSE
Arch Linux or Manjaro
Void Linux
Fedora
OpenBSD
Для установки этого пакета:
Для установки этого пакета:
Для установки порта:
Чтобы уменьшить использование памяти, необязательно включите параметры zsh-mem с помощью
перед запуском "make install".
Centos/RHEL
Cygwin
Установите пакет zsh с помощью установщика. К сожалению, Cygwin не имеет стандартного интерфейса командной строки. Однако вы можете настроить apt-cyg и установить zsh следующим образом:
Самый простой способ изменить оболочку по умолчанию — установить переменную пользовательской среды SHELL. Найдите «Изменить переменные среды для вашей учётной записи» ("Edit Environment variables for your account"), чтобы открыть окно переменных среды, создайте новую переменную с именем «SHELL» и присвойте ей значение «/usr/bin/zsh/».
В качестве альтернативы: откройте Cygwin (в BASH), затем введите:
После открытия файла .bashrc добавьте эту строку в самый верх:
Закройте и сохраните файл. Закройте и снова откройте Cygwin. Он будет выполнять команду каждый раз, когда вы загружаете терминал и запускаете оболочку zsh.
Solus
Funtoo/Gentoo
Alpine Linux
MSYS2
Termux (Android)
Termux — эмулятор терминала для Android, но имеет современные функции, такие как в Debian и Ubuntu (Termux имеет оболочку Bash и программы, подобные GNU Busybox). Для менеджера пакетов Termux использует менеджер пакетов Debian/Ubuntu, APT. Чтобы установить пакет, выполните эту команду:
Команда выглядит как менеджер пакетов FreeBSD (pkg). Или вы можете запустить эту команду:
Чтобы установить zsh в качестве оболочки по умолчанию, выполните эту команду:
Установка Oh-My-Zsh
Oh-My-Zsh — это самый популярный фреймворк для ZSH, который также имеет множество встроенных плагинов и тем. Есть также пара других фреймворков для плагинов, в том числе Antigen, который является полным менеджером пакетов для ZSH, но Oh-My-Zsh имеет множество встроенных плагинов и хорошо выполняет свою работу.
У Oh-My-Zsh есть простой сценарий установки, который вы можете запустить:
Оттуда вы можете включать и отключать плагины, добавляя их в свой файл .zshrc, расположенный в вашем каталоге
Вы можете получить полный список плагинов в репозитории Oh-My-Zsh.
Существует множество тем, но некоторые считают, что powerlevel10k одна из лучших. Она добавляет выровненное по правому краю информационное окно, интеграцию с git и историей команд, невероятную настройку и оборачивает всё это в приятный интерфейс на основе плагина powerline для vim.
Вы захотите использовать iTerm на macOS или на любом терминале с 24-битным цветом, чтобы получить максимальную отдачу от powerlevel10k (или любой другой темы ZSH).
Чтобы настроить powerlevel10k (если вы установили Oh-My-Zsh), просто клонируйте репозиторий в папку пользовательских тем .oh-my-zsh:
Затем вам нужно включить его в .zshrc:
После загрузите .zshrc и вы должны увидеть внесённые изменения.
При желании вы можете настроить приглашение по умолчанию, указав POWERLEVEL9K_LEFT_PROMPT_ELEMENTS в вашем .zshrc. Вот мой с минимальным приглашением командной строки: