Коротко о Unix Shell
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:
- Огромное количество пользователей используют BASH, так как эта оболочка установлена по умолчанию в большинстве систем Linux
- Командный процессор BASH имеет множество встроенных команд
- BASH не имеет встроенного выражения с подстановочными знаками (*,?,[]), которые используются для поиска шаблонов, аналогично регулярному выражению
- Символ # рассматривается как комментарий в сценарии BASH
- Имеет крайне скромные (ограниченные возможности) настройки
- Пользовательские параметры конфигурации находятся в домашнем разделе в файле /home/.bashrc
Первая версия ZSH была написана Паулем Фалстадом, когда он был студентом Принстонского университета в 1990 году. Название оболочки произошло от учетной записи "zsh" университетского ассистента Пауля по имени Чжун Шао. В настоящее время проект развивается энтузиастами под руководством Питера Стефенсона в рамках свободно распространяемого ПО.
ZSH является расширенным аналогом BASH и имеет с ним обратную совместимость, добавляя ему большое количество улучшений.
Ключевые особенности ZSH:
- Встроенное автозаполнение с расширенным функционалом. Клавиша TAB ⇆ используется для автоматического дополнения (завершения) любой команды, которую вы хотите запустить. Помимо автозаполнения она выводит раскрывающийся список всех возможных файлов и каталогов
- Поддерживает встроенные выражения с подстановочными знаками (*, ?, [])
- Более настраиваемый, чем BASH
- Поддерживает различные плагины, расширяющие функционал и темы для кастомизации внешнего вида.
- Oh My Zsh — наиболее известный фреймворк для применения разнообразных настроек оболочки
- Пользовательские параметры конфигурации находятся в домашнем разделе в файле /home/.zshrc
FISH — это POSIX несовместимая оболочка UNIX с упором на интерактивность и удобство использования, была создана Акселем Лильенкранцем в 2005 году. POSIX (Portable Operating System Interface) — набор стандартов, описывающих интерфейсы между операционной системой и прикладной программой (системный API), библиотеку языка "C" и набор приложений и их интерфейсов.
В отличие от других оболочек, которым требуется много настроек и дополнительных плагинов, FISH предлагает все удобства пользователю прямо "из коробки". В то же время FISH является самой нестандартной оболочкой из-за того, что она не соответствует POSIX.
Синтаксис в FISH также изменен в сторону упрощения командного языка оболочки, например все управляющие конструкции завершаются ключевым выражением "end". Еще одним нововведением FISH являются универсальные переменные, вводимые с помощью конструкции "set -U переменная значение".
Ключевые особенности FISH:
- FISH предлагает автоматический «поиск во время ввода», основанный на истории команд и каталоге, в котором вы находитесь на момент ввода
- Встроенная подсветка синтаксиса — это функция, которую мы все хотели бы иметь в интерфейсе командной строки. Это делает работу проще и удобней, экономит много времени. И все это предлагается пользователю прямо «из коробки», интерфейс выглядит красиво и интуитивно понятно
- FISH умеет анализировать справочные страницы MAN и преобразовывать их в табличный формат вывода с удобным перемещением между данными
- Настройки FISH очень просты и понятны. Для изменения внешнего вида достаточно набрать в окне терминала команду: «fish_config», — откроется веб-сервис настроек, с возможностью выбора уже готовой предустановки, либо любой пользовательской конфигурации
- Дополнительно для расширения возможностей и настроек кастомизации FISH предлагается фреймворк Oh My Fish, аналогичный таковому в ZSH
- FISH предлагает очень простой и интуитивно понятный интерфейс командной строки для любого пользователя любого уровня. Для вызова справки по командному процессору FISH нужно просто набрать «help» в окне терминала, — откроется веб-сервис с удобно организованной и хорошо наполненной интерактивной базой знаний, в которой точно «найдется все»
- Пользовательские параметры конфигурации находятся в домашнем разделе в файле /home/.config/fish/config.fish
Демонстрация особенностей
Выводы
- BASH, ZSH и FISH имеют свои достоинства и недостатки, а также некоторые сходства между собой
- Если вы консерватор и приверженец всего классического, вы просто можете оставить себе BASH
- Если вы хотите что-то более гибкое и настраиваемое, вы можете попробовать ZSH, дополнив его плагинами или даже установив Oh My Zsh
- Если вам нужен интерактивный терминал без особых настроек, вы можете смело использовать FISH. Даже если он и не лучший во всем, FISH имеет функциональные возможности, соответствующие основной философии UNIX: «Do one thing, and do it well” (делай что-то одно и делай это хорошо)
Вместо послесловия
Если спросить мое личное мнение, то я предложу FISH, несмотря на то, что сам использую ZSH :)
Комментарии
13:47
Аналогично))
14:37
П.С. Обычно во всех дистрибутивах .bashrc чем-то наполнен, а вот в кальке он пустой был изначально. Вписал туда "neofetch" и алиасы всякие. Они, кстати, в других shell поддерживаются?
15:05
Для fish придется создавать свои, справка вызывается командой alias -h
или искать пути (скрипты), как заставить fish использовать псевдонимы bash.
Правда есть более простой способ использовать псевдонимы bash в fish (возможно специфические и не заработают, не проверял). Для этого все пользовательские сокращения нужно сохранить в отдельный файл,
например ~/.my_aliases
Далее в файл конфига fish (~/.config/fish/config.fish) нужно добавить строку:
source ~/.my_aliases
18:03
15:17
18:04
18:13
18:16
18:20
15:26
Что подразумевает? У меня bash с подстановочными работает...
Например:
touch {a,b,c}{1,2,3}00{a,b,c} #создаст 27 файлов
echo a{1,2}* # выведет 6, соответствующих маске
Или я что-то не верно понял...
16:11
например .* - в zsh и fish выдаст имя каталога в домашней директории, начинающегося с ".",
bash выдаст ошибку
16:49
.*
и нажать TAB (раз или два, в зависимости как настроено) - выдаст все скрытые каталоги, как и должно.
16:53
имелось в виду, что в zsh автодополнение уже встроено, а в fish и подсветка синтаксиса встроена вдобавок
17:11
17:16
zsh при наборе в домашнем первой буквы каталога "Видео": В* - сразу переходит в этот каталог
остальные так не делают
17:27
P.S.: я собственно, к тому, что возможностями оболочки мы не пользуемся в должной мере. А так - кому что на глаз интереснее))) За обзор + и спасTAB!)
17:30
fish в его конфиг (~.config/fish/config.fish) добаить функцию:
function fish_title
set -q argv[1]; or set argv fish
echo (fish_prompt_pwd_dir_length=1 prompt_pwd): $argv;
end
для bash в его конфиг (~.bashrc):
case ${TERM} in
xterm*|rxvt*|Eterm*|aterm|kterm|gnome*|interix|konsole*)
PROMPT_COMMAND='echo -ne "\033]0;${PWD/#$HOME/\~}: bash\007"'
;;
#строка приветствия - может быть любая на ваш выбор
screen*)
PROMPT_COMMAND='echo -ne "\033_${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/\~}\033\\"'
;;
esac
для zsh в его конфиг (у меня /usr/share/zsh/manjaro-zsh-config):
ZSH_THEME_TERM_TAB_TITLE_IDLE="%15<..<%~%<<"
ZSH_THEME_TERM_TITLE_IDLE="%~: zsh"
18:07
xterm*|rxvt*|Eterm*|aterm|kterm|gnome*|interix|konsole*)
18:13
p/s/ проверил - синтаксическая ошибка - типа не определено к чему относится "PROMPT_COMMAND"
в титуле терминала стандартный вывод пользователь-хост
18:54
PROMPT='%F{2}%n%F{4}@%F{5}%m%f%F{4} $%'
https://wiki.archlinux.org/title/Zsh_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)#%D0%A6%D0%B2%D0%B5%D1%82%D0%B0
Кстати, а куда история сохраняется? Я понял, что это там настраивается где-то. Создал в хомяке файл .zshrc и туда алиасы перенёс из .bashrc. Где её искать, если что?
19:02
Fish хорош тем, что его настраивать не нужно, все есть и работает из коробки. Bash - классика иногда очень нужная с точки зрения posix совместимости
19:06
export HISTFILE=<<путь>>
Суп-набор по истории:
export HISTSIZE=1000
export SAVEHIST=$HISTSIZE
setopt APPEND_HISTORY
setopt HIST_IGNORE_ALL_DUPS
setopt HIST_IGNORE_SPACE
setopt HIST_REDUCE_BLANKS
Но bash, конечно, в этом плане мощнее, имхо.
20:44
Силушки уже да и голова весь день вялотекуще побаливает. Но вот всё остальное надо по настройкам тыкать, даже самые мелочи в виде сочетаний клавиш для перескакивания через слова.
18:00
22:08
Просто введи "p10k configure" в консоли и выбирай в мастере наиболее приглянувшиеся варианты оформления.
09:25
21:55
22:35
00:07
16:57
Всякие gui множатся, но и в терминале может быть удобнее.
17:17
09:36
17:34
11:31
21:32
11:59
10:53