Чем отличается bash от zsh
Перейти к содержимому

Чем отличается bash от zsh

  • автор:

Обзор-сравнение командных оболочек (unix shell): BASH, ZSH, FISH

Unix shell — это оболочка (интерпретатор команд), предоставляющая пользовательский интерфейс командной строки для Unix подобных операционных систем. Оболочка одновременно является языком интерактивных команд и языком сценариев (скриптов) и используется пользователем для передачи команд (списка команд) операционной системе.

Название BASH происходит от «Bourne again shell» (еще одна командная оболочка Борна). Появилась в 1987 году, как усовершенствованный вариант командной оболочки Bourne shell (sh, автор Стивен Борн). Поскольку фамилия Bourne (Борн) созвучна со словом born (рожденный), появился каламбур «Born again shell» (рожденная вновь командная оболочка).

BASH, как и все shell, представляет собой командный процессор, работающий в текстовом окне в интерактивном режиме. Поддерживает различные сокращения и переменные, операторы цикла, контроль и подстановку вывода результатов, автодополнение имен файлов и каталогов. Синтаксис BASH и другие особенности языка были заимствованы его автором Брайаном Фоксом из SH.

BASH — одна из первых программ, которую Линус Торвальдс (создатель Linux) портировал на Linux. BASH — самая распространенная оболочка Linux и каждый пользователь, который хоть раз открывал терминал, взаимодействовал с ней.

Ключевые особенности BASH:

  1. Огромное количество пользователей используют BASH, так как эта оболочка установлена по умолчанию в большинстве систем Linux
  2. Командный процессор BASH имеет множество встроенных команд
  3. BASH не имеет встроенного выражения с подстановочными знаками (*,?,[]), которые используются для поиска шаблонов, аналогично регулярному выражению
  4. Символ # рассматривается как комментарий в сценарии BASH
  5. Имеет крайне скромные (ограниченные возможности) настройки
  6. Пользовательские параметры конфигурации находятся в домашнем разделе в файле /home/.bashrc

Первая версия ZSH была написана Паулем Фалстадом, когда он был студентом Принстонского университета в 1990 году. Название оболочки произошло от учетной записи «zsh» университетского ассистента Пауля по имени Чжун Шао. В настоящее время проект развивается энтузиастами под руководством Питера Стефенсона в рамках свободно распространяемого ПО.

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

Ключевые особенности ZSH:

  1. Встроенное автозаполнение с расширенным функционалом. Клавиша TAB используется для автоматического дополнения (завершения) любой команды, которую вы хотите запустить. Помимо автозаполнения она выводит раскрывающийся список всех возможных файлов и каталогов
  2. Поддерживает встроенные выражения с подстановочными знаками (*, ?, [])
  3. Более настраиваемый, чем BASH
  4. Поддерживает различные плагины, расширяющие функционал и темы для кастомизации внешнего вида.
  5. Oh My Zsh — наиболее известный фреймворк для применения разнообразных настроек оболочки
  6. Пользовательские параметры конфигурации находятся в домашнем разделе в файле /home/.zshrc

FISH — это POSIX несовместимая оболочка UNIX с упором на интерактивность и удобство использования, была создана Акселем Лильенкранцем в 2005 году. POSIX (Portable Operating System Interface) — набор стандартов, описывающих интерфейсы между операционной системой и прикладной программой (системный API), библиотеку языка «C» и набор приложений и их интерфейсов.

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

Синтаксис в FISH также изменен в сторону упрощения командного языка оболочки, например все управляющие конструкции завершаются ключевым выражением «end». Еще одним нововведением FISH являются универсальные переменные, вводимые с помощью конструкции «set -U переменная значение».

Ключевые особенности FISH:

  1. FISH предлагает автоматический «поиск во время ввода», основанный на истории команд и каталоге, в котором вы находитесь на момент ввода
  2. Встроенная подсветка синтаксиса — это функция, которую мы все хотели бы иметь в интерфейсе командной строки. Это делает работу проще и удобней, экономит много времени. И все это предлагается пользователю прямо «из коробки», интерфейс выглядит красиво и интуитивно понятно
  3. FISH умеет анализировать справочные страницы MAN и преобразовывать их в табличный формат вывода с удобным перемещением между данными
  4. Настройки FISH очень просты и понятны. Для изменения внешнего вида достаточно набрать в окне терминала команду: «fish_config», — откроется веб-сервис настроек, с возможностью выбора уже готовой предустановки, либо любой пользовательской конфигурации
  5. Дополнительно для расширения возможностей и настроек кастомизации FISH предлагается фреймворк Oh My Fish, аналогичный таковому в ZSH
  6. FISH предлагает очень простой и интуитивно понятный интерфейс командной строки для любого пользователя любого уровня. Для вызова справки по командному процессору FISH нужно просто набрать «help» в окне терминала, — откроется веб-сервис с удобно организованной и хорошо наполненной интерактивной базой знаний, в которой точно «найдется все»
  7. Пользовательские параметры конфигурации находятся в домашнем разделе в файле /home/.config/fish/config.fish

Демонстрация особенностей

Выводы

  1. BASH, ZSH и FISH имеют свои достоинства и недостатки, а также некоторые сходства между собой
  2. Если вы консерватор и приверженец всего классического, вы просто можете оставить себе BASH
  3. Если вы хотите что-то более гибкое и настраиваемое, вы можете попробовать ZSH, дополнив его плагинами или даже установив Oh My Zsh
  4. Если вам нужен интерактивный терминал без особых настроек, вы можете смело использовать FISH. Даже если он и не лучший во всем, FISH имеет функциональные возможности, соответствующие основной философии UNIX: «Do one thing, and do it well” (делай что-то одно и делай это хорошо)

Вместо послесловия

Если спросить мое личное мнение, то я предложу FISH, несмотря на то, что сам использую 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. Подключим наше автодополнение:

#Включить автодополнение autoload -U compinit promptinit compinit promptinit # Для pacman [[ -a $(whence -p pacman-color) ]] && compdef _pacman pacman-color=pacman # Корректировка ввода setopt CORRECT_ALL # Если в слове есть ошибка, предложить исправить её SPROMPT="Ошибка! ввести %r вместо %R? ([Y]es/[N]o/[E]dit/[A]bort) " # Не нужно всегда вводить cd # просто наберите нужный каталог и окажитесь в нём setopt autocd # При совпадении первых букв слова вывести меню выбора zstyle ':completion:*' menu select=long-list select=0 zstyle ':completion:*:default' list-colors $

Уже неплохо, верно? Честно сказать, меня не прельщала перспектива перехода на zsh, поскольку в целом устраивал и bash. Но эксперимент показал: zsh — это очень удобно.

II. Горячие клавиши
Насколько мне известно, в bash горячие клавиши изменению не подлежат. Впрочем, не исключено, что я ошибаюсь. Это известные всем линуксоидам клавиши редактора emacs. Они взяты за основу и будут работать на любой машине, где установлен bash. Конечно, никто не запретит вам использовать стрелки для перемещения между символами или клавишу delete для удаления символа — это тоже есть в bash, и это тоже не нужно настраивать.

Обратимся к zsh. Да, как вы уже, наверное, догадались: в zsh всё нужно настроить под себя. Разумеется, было бы жутко, если бы нам пришлось настраивать каждую клавишу — вовсе нет! Можно выбрать один из двух стилей, ориентируясь на более привычный вам: режим vi или режим emacs.
Рекомендация: выбирайте emasc, чтобы уверенно пользоваться горячими клавишами на любой машине с любым shell’ом, кроме того, наиболее популярен всё таки bash — ориентируйтесь на него.
Разумеется, можно настроить отдельные сочетания клавиш так, как вам нравится.
Пример:

bindkey '\e[3~' delete-char # del bindkey ';5D' backward-word # ctrl+left bindkey ';5C' forward-word #ctrl+right 

III. Алиасы
Очень удобно бывает использовать алиасы различных команд. Алиасы замечательно настраиваются как в bash, так и в zsh. Отличие в том, что в zsh можно использовать не только команды, но и назначить расширения типов файлов для отдельных приложений. Чем это полезно? Благодаря этой возможности zsh может заменить вам даже файловый менеджер. Смотрите сами:

# Aliases alias ls='ls --color=auto' alias grep='grep --colour=auto' alias -s =mplayer alias -s =openoffice.org autoload -U pick-web-browser alias -s =chromium 

Обратите внимание на строки, начинающиеся с alias -s. Теперь представьте: вы находитесь в директории с документами и среди них есть один или несколько с расширением .html. Что мы делаем обычно? Запускаем браузер, жмём Ctrl+O, выбираем файл и просматриваем его. Что позволяют сделать алиасы в zsh? Просто напишите название документа и он тут же будет открыт в браузере.
Для этого сначала подгружается отдельный модуль pick-web-browser

IV. История команд
И уж, конечно, ни один пользователь не оспорит удобство использования истории команд. Здесь zsh ничем особенным не отличается от bash. Настроим его:

# History # хранить историю в указанном файле export HISTFILE=~/.zsh_history # максимальное число команд, хранимых в сеансе export HISTSIZE=1000 export SAVEHIST=$HISTSIZE # включить историю команд setopt APPEND_HISTORY # убрать повторяющиеся команды, пустые строки и пр. setopt HIST_IGNORE_ALL_DUPS setopt HIST_IGNORE_SPACE setopt HIST_REDUCE_BLANKS 

V. Прочие удобства
Для zsh есть одна прелюбопытнейшая вещь: плагин zsh-syntax-highlighting. Пользователи ArchLinux могут установить его из AUR, остальные — скачать из одноимённого проекта на github. Поставьте его, и ваш эмулятор терминала заиграет новыми красками.
Изначально он ориентирован на любые терминалы — не только поддерживающие 256 цветов, поэтому некоторые цвета могут выглядеть не так, как нам нравится, но это можно исправить. Главный файл с настройками цветов располагается по пути:
/usr/share/zsh/plugins/zsh-syntax-highlight/highlighters/main/main-highlighter.zsh. Но править непосредственно его нет нужды (спаибо, ZyXI за указание на ошибку).
Измените цвета так, как вам нужно в .zshrc и активируйте плагин.
Пример:

# zsh-syntax-highlighting from AUR typeset -A ZSH_HIGHLIGHT_STYLES ZSH_HIGHLIGHT_STYLES=( 'alias' 'fg=153,bold' 'builtin' 'fg=153' 'function' 'fg=166' 'command' 'fg=153' 'precommand' 'fg=153, underline' 'hashed-commands' 'fg=153' 'path' 'underline' 'globbing' 'fg=166' ) source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh 

Также в zsh имеется очень популярный способ запаковки/распаковки архивов. Введите команду extract myfile.tar — распакуете архив, введите команду pk tar myfile — запакуете файл в архив указанного формата. Выходит, zsh может заменить архиватор?

Для распаковки впишем в .zhsrc:

# Распаковка архивов # example: extract file extract ()

Для создания архивов:

# Запаковать архив # example: pk tar file pk () < if [ $1 ] ; then case $1 in tbz) tar cjvf $2.tar.bz2 $2 ;; tgz) tar czvf $2.tar.gz $2 ;; tar) tar cpvf $2.tar $2 ;; bz2) bzip $2 ;; gz) gzip -c -9 -n $2 >$2.gz ;; zip) zip -r $2.zip $2 ;; 7z) 7z a $2.7z $2 ;; *) echo "'$1' cannot be packed via pk()" ;; esac else echo "'$1' is not a valid file" fi > 

VI. Итоги
Zsh очень удобен для повседневной работы и делает добрую половину рутины за вас. Но стоит обратить внимание на различия между этими двумя оболочками. Например, в zsh после for обязательно вставлять пробел, нумерация массивов в zsh начинается с 1, чего совершенно невозможно понять.
Так, если вы используете shell для повседневной работы, исключающей написание скриптов, используйте zsh. Если вам часто приходится писать свои скрипты, только bash! Впрочем, можно комбинировать.
Как установить zsh в качестве оболочки по-умолчанию для отдельного пользователя:

$ chsh -s /bin/zsh your_user

В чём Разница между fish, zsh, bash, sh, csh, dash,

Добрый день, я бы хотел узнать, какие отличия между fish и другими оболочками. Возможность есть отличия в скорости, или переменные окружения другие, синтаксис, автодополние? Мне интересно, ведь, например nixos package manager несовместим с fish.

WinUsers
09.11.21 18:58:37 MSK

Возможность есть отличия в скорости, или переменные окружения другие, синтаксис, автодополние?

cocucka ★★★★☆
( 09.11.21 19:09:19 MSK )

  • Fish — наркоманский синтаксис, несовместимый с POSIX, но значительная часть функциональности просто работает из коробки. Остальное легко добавляется небольшим количеством дополнений. Работает почти идеально и есть не просит.
  • Zsh — старше fish, (почти) POSIX-совместима. Также имеет обширную функциональность, сторонняя поддержка больше, чем у fish. Но чтобы добиться аналогичной fish функциональности, нужно приложить гораздо больше усилий, при этом всё равно так же хорошо работать не будет.
  • Bash — говно мамонта. Есть приблуды, чтобы придать ему человеческое лицо, но работают они ещё более криво, чем в zsh.

sudopacman ★★★★★
( 09.11.21 19:16:09 MSK )
Ответ на: комментарий от sudopacman 09.11.21 19:16:09 MSK

А можно как-то сделать fish posix совместиным? Работает он намного лучше zsh, и не так ограничен в функционале, как bash.

WinUsers
( 09.11.21 19:18:43 MSK ) автор топика
Ответ на: комментарий от WinUsers 09.11.21 19:18:43 MSK

это и не нужно, просто юзай баш для сторонних скриптов а фиш для работы в консоле и своих скриптов. юзаю фиш уже пару лет

TDrive ★★★★★
( 09.11.21 19:20:53 MSK )
Ответ на: комментарий от TDrive 09.11.21 19:20:53 MSK

Мне нужно, я указал выше, что fish несовместим с nixpm.

WinUsers
( 09.11.21 19:23:09 MSK ) автор топика
Ответ на: комментарий от WinUsers 09.11.21 19:18:43 MSK

А можно как-то сделать fish posix совместиным?

Разве что свой форк запилить.

На самом деле в командной строке это не так важно. Главное не менять login shell для пользователя через chsh , а выбрать fish в настройках эмулятора терминала.

!! и !$ добавляются плагином, при этом замена производится сразу, а не после нажатия Enter, что намного удобнее, чем в bash.

sudopacman ★★★★★
( 09.11.21 19:25:35 MSK )
Ответ на: комментарий от WinUsers 09.11.21 19:23:09 MSK

не пользовался, но это странно что программа зависят от интерпретатора юзера. Может написать авторам?

TDrive ★★★★★
( 09.11.21 19:26:17 MSK )

Use bash, Luke

bash — есть практически везде и достаточно удобен. Много документации по нём Идеальный балланс.

sh — есть вообще везде, но не столь удобен.

Остальные не так распространены и разной степени нестандратны

Kroz ★★★★★
( 09.11.21 19:27:00 MSK )
Ответ на: комментарий от sudopacman 09.11.21 19:25:35 MSK

у меня фиш в /etc/passwd прописан и даже для рута, не ловил каких то проблем с этим

TDrive ★★★★★
( 09.11.21 19:27:17 MSK )
Ответ на: комментарий от TDrive 09.11.21 19:26:17 MSK

Нет, тут проблема в том, что этот пакетный менеджер требует определенных переменных окружения, а синтаксис для изменения этих переменные в fish несовместим с bash, под который nixpkg заточен. Поэтому автостарт nixpkg просто не работает с рыбой.

WinUsers
( 09.11.21 19:29:39 MSK ) автор топика
Ответ на: комментарий от WinUsers 09.11.21 19:29:39 MSK

я бы написал алиас который будет запускать его в баше

TDrive ★★★★★
( 09.11.21 19:30:46 MSK )
Ответ на: комментарий от TDrive 09.11.21 19:27:17 MSK

А как же /etc/profile , ~/.bash_profile , /etc/bash.bashrc , ~/.bashrc и прочие скрипты автозапуска?

sudopacman ★★★★★
( 09.11.21 19:31:14 MSK )
Ответ на: комментарий от TDrive 09.11.21 19:30:46 MSK

Можно, надо будет попробовать.

WinUsers
( 09.11.21 19:31:23 MSK ) автор топика
Ответ на: комментарий от WinUsers 09.11.21 19:29:39 MSK

У меня всё работало с bash в качестве login shell и fish в эмуляторе терминала.

sudopacman ★★★★★
( 09.11.21 19:32:00 MSK )

annulen ★★★★★
( 09.11.21 19:32:37 MSK )
Ответ на: комментарий от sudopacman 09.11.21 19:31:14 MSK

ну на баш профайл пофиг, а /etc/profile не вызывает проблем. это рабочий ноут, а не сервер если че.

TDrive ★★★★★
( 09.11.21 19:32:49 MSK )

Zubok ★★★★★
( 09.11.21 19:33:08 MSK )
Ответ на: комментарий от sudopacman 09.11.21 19:31:14 MSK

Дело в том, что я устанавливаю fish, через chsh(так рекомендовано в archwiki). Поэтому естественно .bashrc и другие не работают. Да, вы мне, как раз посоветовали установить его через эмулятор терминала по умолчанию.

WinUsers
( 09.11.21 19:33:19 MSK ) автор топика
Ответ на: комментарий от TDrive 09.11.21 19:30:46 MSK

Тут ещё стоит отметить плагин bass (и аналоги).

sudopacman ★★★★★
( 09.11.21 19:33:22 MSK )
Ответ на: комментарий от sudopacman 09.11.21 19:33:22 MSK

А, ну вот, тогда вообще проблем нету, не знал про этот плагин.

TDrive ★★★★★
( 09.11.21 19:35:53 MSK )
Ответ на: комментарий от sudopacman 09.11.21 19:33:22 MSK

Плагин для шелла. Вот, меня устраивает.

WinUsers
( 09.11.21 19:36:17 MSK ) автор топика
Последнее исправление: WinUsers 09.11.21 19:36:33 MSK (всего исправлений: 1)

Ответ на: комментарий от WinUsers 09.11.21 19:29:39 MSK

Попробуй добавить в конфиг системы programs.fish.enable = true; .

Tsukasa
( 09.11.21 19:41:15 MSK )
Последнее исправление: Tsukasa 09.11.21 19:48:11 MSK (всего исправлений: 1)

Ответ на: комментарий от WinUsers 09.11.21 19:18:43 MSK

najlus ★★★★★
( 09.11.21 19:42:23 MSK )

Если часто пишешь скрипты (как это делаю я), то лучше сидеть bash , так как не приходится держать в голове сразу два синтаксиса: синтаксис какой-то другой оболочки + bashевский, который всё равно нужен.

Если дофига хакер, то нужно сидеть в zsh и хвастаться на ЛОРе и гитхабе, как ты его круто настроил.

Ну а если консоль нужна редко, то сойдёт и fish .

Про остальные, если интересно:

dash — быстрая и очень урезанная оболочка, чтобы запускать скрипты быстрее. Совместима с POSIX, но не поддерживает фишки bash .

csh мёртв. tcsh , если вдруг где попадётся, — тоже мёртв.

wandrien ★★
( 09.11.21 19:46:32 MSK )
Ответ на: комментарий от wandrien 09.11.21 19:46:32 MSK

dash — быстрая и очень урезанная оболочка, чтобы запускать скрипты быстрее.

Это не совсем так. Есть что работает быстрее, но bash потому и толстый, что на каждую конструкцию применяется своя функциональная реализация, которая работает быстрее по принципу смещения баланса память=код/размер. Но и даже если что-то интерпретируется быстрее, то надо понимать, что на bash код мощнее, а это для интерпретаторов очень важно, так как внутренности то работают на C.

vodz ★★★★★
( 09.11.21 20:06:47 MSK )
Ответ на: комментарий от vodz 09.11.21 20:06:47 MSK

Не понял, что ты имеешь ввиду.

apt_install_lrzsz ★★★
( 09.11.21 20:58:08 MSK )
Ответ на: комментарий от wandrien 09.11.21 19:46:32 MSK

Пока есть возможность спрошу, можно в bash поведение ^W сделать как в ksh?

RebHat
( 09.11.21 21:29:44 MSK )
Ответ на: комментарий от RebHat 09.11.21 21:29:44 MSK

А какое там поведение?

wandrien ★★
( 09.11.21 21:30:30 MSK )
Ответ на: комментарий от wandrien 09.11.21 21:30:30 MSK

пример, допустим есть путь /home/user/emacs/etc

баш при нажатии ^W удалит весь путь, кш до первого знака, только etc

RebHat
( 09.11.21 21:39:15 MSK )
Ответ на: комментарий от RebHat 09.11.21 21:39:15 MSK

Хм, у меня не получается забиндить unix-filename-rubout на C-w. Он просто игнорирует этот bind, будто его нет:

"\C-b": unix-filename-rubout "\C-w": unix-filename-rubout 

wandrien ★★
( 09.11.21 22:07:08 MSK )
Ответ на: комментарий от wandrien 09.11.21 22:07:08 MSK

спасибо за подсказку, пойду в гугл поищу.

дернул черт опенка попробовать, пришлось другой шелл ставить. в баш конечно работает Alt+Backspace , но это неудобно весьма.

RebHat
( 09.11.21 22:17:17 MSK )
Ответ на: комментарий от apt_install_lrzsz 09.11.21 20:58:08 MSK

То, что на bash можно сделать одной командой, на posix shell придётся делать большим и медленным скриптом: массивы, обработка строк, регулярки. Есть вещи, которые сделать на dash практически не возможно — обработка вывода команд с zero-char разделителем записей, статус обоих команд pipe.

vodz ★★★★★
( 09.11.21 22:29:59 MSK )
Ответ на: комментарий от wandrien 09.11.21 22:07:08 MSK

это для меня сработало:

stty werase undef bind "\C-w":unix-filename-rubout 

благодарю за подсказку

RebHat
( 09.11.21 22:53:43 MSK )
Ответ на: комментарий от RebHat 09.11.21 22:53:43 MSK

wandrien ★★
( 09.11.21 22:56:34 MSK )

А еще ksh был. Кто помнит? Мой любимый шел был тогда, в NetBSD 1.6 🙂

Вроде как все шелы обратно совместимы с борн шел aka sh. Хотя кто эти новомодные глисты знает, завелись и не выведешь теперь.

untitl3d ★
( 09.11.21 23:02:03 MSK )
Ответ на: комментарий от untitl3d 09.11.21 23:02:03 MSK

Не застал. Ставил как-то недавно, почитал мануал. Нашел несколько фич, отсутствующих в bash. Подивился да вернулся в bash.

wandrien ★★
( 09.11.21 23:04:17 MSK )
Ответ на: комментарий от wandrien 09.11.21 22:56:34 MSK

елки, похоже я поторопился с ответом(

после релога не работает клавиша «s».

RebHat
( 09.11.21 23:19:55 MSK )
Ответ на: комментарий от wandrien 09.11.21 22:56:34 MSK

set bind-tty-special-chars off "\C-w": unix-filename-rubout "\e\C-?": unix-word-rubout 

RebHat
( 09.11.21 23:49:08 MSK )
Ответ на: комментарий от WinUsers 09.11.21 19:23:09 MSK

Что эти слова вместе значат? Ты его как дефолтный шелл в stdenv пихаешь или как? Как шелл может быть несовместим с PM?

t184256 ★★★★★
( 09.11.21 23:52:45 MSK )

какие отличия между fish и другими оболочками. Возможность есть отличия в скорости, или переменные окружения другие, синтаксис, автодополние?

Гигантские, но они при этом все нестандартны и ужасны. Юзай xonsh, там хоть ЯП настоящий.

t184256 ★★★★★
( 09.11.21 23:55:44 MSK )

Мне интересно, ведь, например nixos package manager несовместим с fish.

Кот не совместим? Всё совместимо.

anonymous
( 10.11.21 10:55:23 MSK )

Возможность есть отличия в скорости

какая разница, какая скорость в интерактивной оболочки? А для скриптов длиннее однострочников они все более-менее сравнимое говно

anonymous
( 10.11.21 15:00:54 MSK )

sh это просто название файла, но обычно подразумевается, что под этим названием будет POSIX-совместимый шелл, по идее оно должно быть во всех unix-ах в т.ч. в линуксах

dash это реализация POSIX-совместимого шелла из дебиана, для запуска под именем /bin/sh

bash это почти POSIX шелл, есть в большинстве линуксов как дефолтный интерактивный шелл, в некоторых он к сожалению преподносится ещё и как /bin/sh, от чего неграмотные юзеры начинают писать для него скрипты. Некоторые извращенцы пишут скрипты для баша, даже зная что это не /bin/sh, ставят в начале #!/bin/bash

csh — дефолтный интерактивный шелл FreeBSD, довольно удобный в качестве интерактивного, для скриптов (как и баш) лучше не использовать но некоторые пишут

zsh fish и ещё куча разных *sh — нестандартные шеллы для любителей, их много разных, разбираться в них незачем

Что такое 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

zsh --version

перед установкой из Homebrew. Если он новее 4.3.9, возможно, всё будет в порядке. Желательно новее или равно 5.0.

brew install zsh

Чтобы установить zsh в качестве оболочки по умолчанию, выполните следующие действия, предполагая, что по умолчанию установлена Homebrew.

Последние версии Mac OS:

chsh -s /usr/local/bin/zsh

Mac OS High Sierra и более ранние версии:

chsh -s /bin/zsh

Предполагая, что у вас установлен Homebrew. В противном случае большинство версий macOS по умолчанию поставляют zsh, но обычно это более старая версия. В качестве альтернативы вы также можете использовать MacPorts

sudo port install zsh zsh-completions

Ubuntu, Debian и производные (Windows 10 WSL | Собственное ядро Linux с Windows 10 build 1903, Kali Linux, Linux Mint, elementary OS, Zorin OS, Raspbian, MX Linux, Deepin)

sudo apt install zsh

OpenSUSE

zypper install zsh

Arch Linux or Manjaro

pacman -S zsh

Void Linux

xbps-install zsh

Fedora

dnf install zsh

OpenBSD

Для установки этого пакета:

pkg_add zsh

Для установки этого пакета:

pkg install zsh

Для установки порта:

cd /usr/ports/shells/zsh/ && make install clean

Чтобы уменьшить использование памяти, необязательно включите параметры zsh-mem с помощью

make config

перед запуском «make install«.

Centos/RHEL

sudo yum update && sudo yum -y install zsh

Cygwin

Установите пакет zsh с помощью установщика. К сожалению, Cygwin не имеет стандартного интерфейса командной строки. Однако вы можете настроить apt-cyg и установить zsh следующим образом:

apt-cyg install zsh

Самый простой способ изменить оболочку по умолчанию — установить переменную пользовательской среды SHELL. Найдите «Изменить переменные среды для вашей учётной записи» («Edit Environment variables for your account»), чтобы открыть окно переменных среды, создайте новую переменную с именем «SHELL» и присвойте ей значение «/usr/bin/zsh/».

В качестве альтернативы: откройте Cygwin (в BASH), затем введите:

sudo nano ~/.bashrc

После открытия файла .bashrc добавьте эту строку в самый верх:

exec zsh

Закройте и сохраните файл. Закройте и снова откройте Cygwin. Он будет выполнять команду каждый раз, когда вы загружаете терминал и запускаете оболочку zsh.

Solus

eopkg it zsh

Funtoo/Gentoo

emerge app-shells/zsh

Alpine Linux

apk add zsh

MSYS2

pacman -S zsh

Termux (Android)

Termux — эмулятор терминала для Android, но имеет современные функции, такие как в Debian и Ubuntu (Termux имеет оболочку Bash и программы, подобные GNU Busybox). Для менеджера пакетов Termux использует менеджер пакетов Debian/Ubuntu, APT. Чтобы установить пакет, выполните эту команду:

pkg install zsh

Команда выглядит как менеджер пакетов FreeBSD (pkg). Или вы можете запустить эту команду:

apt update && apt upgrade apt install zsh

Чтобы установить zsh в качестве оболочки по умолчанию, выполните эту команду:

chsh -s /data/data/com.termux/files/usr/bin/zsh
chsh -s $(which zsh)

Установка Oh-My-Zsh

Oh-My-Zsh — это самый популярный фреймворк для ZSH, который также имеет множество встроенных плагинов и тем. Есть также пара других фреймворков для плагинов, в том числе Antigen, который является полным менеджером пакетов для ZSH, но Oh-My-Zsh имеет множество встроенных плагинов и хорошо выполняет свою работу.

У Oh-My-Zsh есть простой сценарий установки, который вы можете запустить:

sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

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

Вы можете получить полный список плагинов в репозитории Oh-My-Zsh.

Темы

Существует множество тем, но некоторые считают, что powerlevel10k одна из лучших. Она добавляет выровненное по правому краю информационное окно, интеграцию с git и историей команд, невероятную настройку и оборачивает всё это в приятный интерфейс на основе плагина powerline для vim.

Вы захотите использовать iTerm на macOS или на любом терминале с 24-битным цветом, чтобы получить максимальную отдачу от powerlevel10k (или любой другой темы ZSH).

Чтобы настроить powerlevel10k (если вы установили Oh-My-Zsh), просто клонируйте репозиторий в папку пользовательских тем .oh-my-zsh:

git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~/powerlevel10k

Затем вам нужно включить его в .zshrc:

echo 'source ~/powerlevel10k/powerlevel10k.zsh-theme' >>! ~/.zshrc

После загрузите .zshrc и вы должны увидеть внесённые изменения.

source ~/.zshrc

При желании вы можете настроить приглашение по умолчанию, указав POWERLEVEL9K_LEFT_PROMPT_ELEMENTS в вашем .zshrc. Вот мой с минимальным приглашением командной строки:

POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs dir rbenv) POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(root_indicator background_jobs status load)

Вы можете найти полную документацию для powerlevel10k в репо.

Связанные статьи:

  • Как узнать, какая оболочка используется в Linux (87%)
  • Как вывести значения всех переменных и переменных окружения в Linux (87%)
  • Что такое TTY в Linux? (и как использовать команду tty) (63.1%)
  • Скрипты, выполняемые при запуске Bash (57.6%)
  • Как проверить использование памяти на Linux (50%)
  • 15 полезных практических примеров команды locate в Linux (RANDOM — 13.1%)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *