Командные оболочки: от классики до инноваций
Наверняка многие знают оболочки
sh и
bash. Так же большинство из нас что-то слышали про
zsh и
fish. Однако на этом список не заканчивается.
В наши дни оболочек развелось немало, но далеко не все они используются. Сегодня мы рассмотрим самые основные экземпляры и посмотрим на их ключевые особенности.
Оболочка sh (Bourne shell)
Эта оболочка была написана Стивом Борном в
1977 году и является старейшей из известных публике.
Bourne shell была первой полноценной оболочкой и содержала функционал, который сейчас реализован всеми актуальными последователями: использование переменных, выполнение команд и функций, перенаправление ввода-вывода.
Сейчас
sh по ряду причин является ссылкой на sh-совместимую оболочку:
$ ls -l | grep sh
sh -> dash
В современных системах
Bourne shell уже не используется в качестве пользовательской оболочки, однако полезен в роли командного интерпретатора.
Именно поэтому он и существует в качестве ссылки, чтобы не ломать совместимость для выполнения скриптов. Все же помнят про
shebang?)
#!/bin/sh
Оболочка bash (Bourne again shell)
Была разработана в рамках проекта GNU в качестве улучшенной реализации Bourne shell в
1989 году.
Основными создателями
bash являются Брайан Фокс и Чет Рэми. Название можно перевести, как «
Возрождённый шелл Борна». Скорее всего, самая популярная оболочка на сегодняшний день.
Данная оболочка является наследником
sh и значительно расширяет его функционал. Однако все еще является древней и не такой красивой и конфигурируемой, как более новые
zsh и
fish.
Оболочка zsh (Z shell)
Свободная современная sh-совместимая оболочка, созданная в
1990 году. Имеет ряд преимуществ перед
bash, касающихся в основном работы в интерактивном режиме.
$ sudo apt install zsh
Zsh поддерживает автодополнение, коррекцию опечаток, подсветку синтаксиса и довольно мощную конфигурацию внешнего вида и функционала через темы и плагины.
Однако zsh в полной мере раскрывается только через настройку конфигов. При первом запуске вы, вероятно, зададитесь вопросом: Зачем оно вообще надо - тот же самый bash... Да, его нужно вручную настраивать.
Очень рекомендованным дополнением к оболочке
zsh является фреймворк "
OH MY ZSH", который предназначен для управления настройками
zsh и расширения его функционала за счет плагинов и тем.
Оболочка fish (friendly interactive shell)
Fish уже не такая "бородатая" оболочка. Первая версия датируется 2005 годом. На фоне основных коллег по цеху, которые были выпущены еще в прошлом веке
fish — свежий огурчик.
$ sudo apt-add-repository ppa:fish-shell/release-3
$ sudo apt update
$ sudo apt install fish
Если вам нужен функционал больше, чем у
bash, но вам не хочется зарываться в конфиги, как с
zsh, можно рассмотреть данную оболочку.
Все бы хорошо, но есть нюанс:
fish -
POSIX-несовместимая оболочка. Это значит, что правила, продиктованные стандартом POSIX для ряда оболочек (bash, zsh и т.д.), не имеют никакого влияния на
fish.
Пример. Вот так мы определяем локальные переменные в bash и zsh:
$ MY_VAR="Hello"
Давайте попробуем повторить то же самое в fish:
$ MY_VAR="Hello"
fish: Unsupported use of '='. In fish, please use 'set MY_VAR "Hello"'
Тут так не получится. В
fish переменные определяются следующим образом:
$ set MY_VAR "Hello"
Уже поняли в чем суть? Если вы напишите скрипт на специфичном для
fish синтаксисе и попытаетесь запустить его через интерпретатор bash, sh или zsh, вероятно, он упадет с ошибкой.
Linux++ | IT-Образование