Mac os bash или 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

Читайте также:  Спецсимволы при поиске windows

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 в качестве оболочки по-умолчанию для отдельного пользователя:

Источник

Mac os 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 и получаем заветный путь:

Читайте также:  Windows 2003 internet information services

Возможно, это не самый убедительный пример. Того же эффекта можно достичь просто написав 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:

Заключение

Я не сомневаюсь, что многое из написанного можно достигнуть с помощью различных плагинов и скриптов для баша. Но зачем если есть хорошее решение «из коробки». Которое работает, и работает очень хорошо.

Источник

Question: Q: bash or zsh on macOS Big Sur?

Apple has dropped support for bash, which is widely used in Linux systems, due to licensing issues. Newer versions of bash are licensed with GPL v3.0 which is more restrictive (basically it doesn’t allow to be packaged with other non-free software).

But, if you come from Linux and you’re too accustomed to bash, you don’t have to use zsh. brew to the rescue!

Also, to stop seeing Apple’s warning to use zsh, add the following line to

You’re are welcome 🙂

Posted on Dec 15, 2020 12:39 AM

All replies

Loading page content

Page content loaded

bash v. 3.2.57 still exists on Big Sur. The only reason you’d need to install it is if you need a newer version.

(basically it doesn’t allow to be packaged with other non-free software).

That’s not the problem with GPLv3. Apple doesn’t sell any part of its OS. GPLv3 would require Apple to allow modification to their own source code by the user, such as the code that prevents macOS from running on non-Apple hardware.

Dec 15, 2020 4:02 AM

Yes, it still exists but it’s from 2007. Bit old.

Also, thanks for correcting me. GPL 3 is certainly much more restrictive than previous versions. Maybe they’ll allow users to modify their source code in the future so that they can ship all the updated versions of open source programs.

And really annoying message from Apple to change our shell. I wouldn’t mind using the old version if it wasn’t for that message. To be honest, I wouldn’t know.

Dec 15, 2020 4:26 AM

And really annoying message from Apple to change our shell. I wouldn’t mind using the old version if it wasn’t for that message.

You posted how to disable the message. That should work in the installed version as well.

Читайте также:  Не поддерживает windows starter

Dec 15, 2020 4:46 AM

Agreed. But you’d be using the 2007 version. And as per Apple suggestion, it would be better to use a more recent shell such as zsh (not under GPLv3). Also, Apple’s (annoying) message gives the impression that installing zsh is the only way to use an up to date shell. Perhaps they can can add that you are still free to use an updated bash shell via brew.

Dec 15, 2020 4:56 AM

Agreed. But you’d be using the 2007 version.

I was commenting on your statement, «I wouldn’t mind using the old version if it wasn’t for that message.»

Perhaps they can can add that you are still free to use an updated bash shell via brew.

That’s always been true for all of the bundled unix software. You don’t need to use Homebrew to install it, either. There are benefits to using Homebrew, but also some drawbacks.

People who use any shell environment should know how to install whatever shell they want. Apple doesn’t need to tell them. I wouldn’t suggest to a casual user that they could install some other version of the shell. The suggestion to switch default shells confuses too many people without adding the suggestion that they should install some package manager in order to install a shell when all they were doing was blindly running some command they found on the internet.

Источник

Question: Q: why is bash replaced with zsh?

«The default interactive shell is now zsh.

To update your account to use zsh, please run `chsh -s /bin/zsh`.

I wanted to know what are the pros and cons of zsh in comparison to bash?

Posted on Oct 11, 2019 6:49 AM

Helpful answers

Apple has shipped the 2007 vintage of Bash v3 and cannot upgrade to Bash 4 due to GPL3 restrictions. For the same reason, Apple is not including any of the GNU software. As Barney pointed out, the homebrew package manager can install Bash4 and that will go into /usr/local/bin. You could also install the GNU Coreutils in the same manner, which I did.

By shifting to Zsh, Apple can keep it version current. Zsh has far more power than Bash 4. By default, Zsh ignores white-space in filenames, so you do not have to quote Zsh variables to avoid Bash white-space issues. Want an absolute path in Zsh, it is simply $. Zsh supports globing so you can do directory recursion. It also supports associative arrays, and ton of other stuff.

The Zsh site has a Zsh Manual for Zsh v5.3 which is current. The Zsh user guide however is dated 2003.

Much of the Bash script logic just works with Zsh, but now, when you open the Terminal, your Bash associated dot files do not get run, so your PATH and other shell customizations need to be set up for Zsh in the

/.zshrc file. Here is what I have done with mine:

That MyHost is because I do not want a hostname assigned by a remote VPN DNS server. The e/grep color is vivid yellow, and the Zsh uses an entirely different PS1 syntax from Bash. Finally, when I press the escape key in a command line, the bindkey -v allows me to use Vim editor syntax when editing the command-line.

Источник

Оцените статью