Найти в Дзене
Герман Геншин

Эти неожиданные оболочки для Linux перевернут ваше представление о терминале!

Оглавление

Быстрые ссылки

Если вы используете Linux, наверняка привыкли работать в терминале через bash или zsh. Возможно, слышали и про старые sh или csh, а также про альтернативу — fish. Но что же скрывают совсем новые оболочки? Могут ли они действительно сделать вашу работу проще и приятнее?

fish: дружелюбная и интуитивная оболочка

fish — пожалуй, самая популярная из современных альтернатив bash. Она славится своим удобством: здесь мощная система автодополнения, подсветка синтаксиса и подсказки прямо по ходу работы.

Установить fish просто: в Linux и macOS достаточно ввести brew install fish или apt-get install fish.

Если вам нравится автодополнение в zsh, в fish вы почувствуете себя дома. Как только начинаете набирать команду, тут же видите подсказку — в сером цвете после уже введённого текста:

-2

Подсказки строятся на истории ваших команд и актуальных путях к файлам, так что автодополнение действительно адаптируется под пользователя. Продолжаете печатать — fish меняет вариант на подходящий. Принять подсказку можно стрелкой вправо, а клавиша Tab покажет все возможные варианты, между которыми можно легко переключаться стрелками:

-3

Если ищете автодополнение для самой команды, fish покажет все подходящие варианты — с краткими пояснениями для каждой:

-4

Нужно узнать доступные опции команды? Просто нажмите Tab сразу после дефиса — откроется список опций с описаниями:

-5

fish легко настраивается, хотя и отличается от классических shell своим подходом. Например, чтобы изменить prompt (текст перед курсором), fish уже по умолчанию предлагает яркий и информативный вариант:

-6

Fish сокращает названия директорий до первых букв по всей цепочке и показывает текущую ветку git, если вы находитесь в репозитории. При желании, prompt меняется функцией — нужно просто вызвать нужную команду fish.

Такой подход заметно удобнее, чем стандартная переменная PS1 в Bash с её непростым синтаксисом.

К примеру, переменная PATH в fish хранится не строкой, а списком — редактировать её при помощи функции fish_add_path намного проще.

Для детальной настройки fish есть даже веб-интерфейс: достаточно набрать fish_config, и вы откроете в браузере окно с возможностью менять цвета и настройки прямо через красивый UI:

Правда, в fish есть свои особенности. Например, если вы привыкли к bash-комбинациям типа !$ (для подстановки последнего аргумента из прошлой команды), то здесь их нет (как и $0, $?, !!). Вместо этого последний аргумент можно подставить сочетанием Alt + стрелка вверх, а на другие команды есть собственные способы — придётся немного привыкнуть.

Из-за таких отличий fish не совместим с POSIX: скрипты, написанные под fish, в bash или zsh работать не будут без доработок.

Murex: умная оболочка с поддержкой структурированных данных

Murex — относительно молодая оболочка (пишется с 2017 года) на языке Go. Её фишка — полноценная работа со сложными структурами данных (JSON, CSV, словари) прямо в терминале. Например:

В этом примере переменная содержит объект JSON, как в JavaScript:

-7

Для работы с ними в Murex используются специальные аналоги классических команд. Пример — команда f, общий ls с возможностью фильтрации по нужному флагу:

Отличие в том, что результат — полноценный JSON-массив, а не просто строка:

-8

Аналогично, команда g — это современная версия glob из bash.

Murex использует свои собственные "каналы" передачи данных: в отличие от обычных оболочек, это не просто потоки строк, а реально структурированные объекты.

Вместо обычной вертикальной черты (|) появляется универсальный канал =>, который сохраняет структуру данных даже при передаче их между внешними командами. Пример работы:

-9

В стандартном случае канал сжимает всё в одну строку, а новый вариант передаёт каждый элемент списка отдельно, поэтому wc умеет правильно посчитать количество элементов.

Это особенно удобно при работе со сложными данными: можно передавать результат из одной команды в другую и сразу выбирать нужные вложенные части. Вот пример:

Здесь, [[ ]] позволяет "нырнуть" внутрь JSON-объекта, который возвращает команда config:

Главное разочарование Murex — не самая дружелюбная документация. По умолчанию prompt просто показывает "murex" — не очень информативно. Потратил немало времени на поиск инструкции, как его поменять: оказывается, здесь нет привычной bash-переменной $PS1.

Если в fish смена prompt — несмотря на новые концепции — реализована понятно, то в Murex с этим не всё так очевидно. Я нашёл упоминания про onPrompt, но этот способ не сработал — в итоге решение пришлось выискивать на GitHub. После долгих поисков мне удалось сделать цветной prompt с отображением пути и статуса команды, но без сторонней подсказки разобраться непросто.

Nushell: по-настоящему свежий взгляд на терминал

Многие оболочки Linux похожи друг на друга: отличаются в основном деталями синтаксиса и нюансами скриптов. Но Nushell (Nu), написанный на Rust и выпущенный в 2019, с порога вызывает ощущение, что это нечто иное. Уже первая команда — и вы удивитесь:

Здесь, как и в Murex, поддерживаются структурированные данные, но Nu пошёл дальше: стандартные команды вроде ls выводят всё в виде аккуратной таблицы — читать их намного удобнее, чем обычный текстовый поток:

В Nushell очень просто передавать структурированные данные между командами: например, вы можете получить ответ от API и тут же вытащить нужные значения, используя команды http и get:

get позволяет моментально обратиться к нужному свойству, а сокращённый аналог синтаксиса делает это ещё быстрее:

Nushell приятно удивляет и документированностью, и интуитивностью — освоить его проще простого. Всё работает именно так, как ожидаешь.

Есть и минусы. Например, размер: Nushell занимает 39 мегабайт — против скромных 1,3 МБ у zsh. Для современных SSD это не критично, но разница впечатляет.

Ещё — странность при работе ls -d: запуск идёт медленно (видимо, считается размер папок, как в du), а результат почему-то разбивается на несколько отдельных таблиц — возможно, это баг.

PowerShell: бывшая Windows-оболочка теперь и на Linux

PowerShell — фирменная командная оболочка от Microsoft, которая известна пользователям Windows, но теперь поддерживается и на Linux/macOS (с 2016 года).

Поставить PowerShell на Mac можно командой brew install --cask powershell, на Linux — согласно инструкции для вашего дистрибутива. Запуск — командой pwsh.

В PowerShell можно использовать привычные по MS-DOS команды вроде dir:

Если хотите, легко добавить немного ностальгии, работая с редактором Microsoft Edit под Linux/macOS и возвращаясь в атмосферу старого доброго DOS.

Но если привычнее Unix-команды — используйте их: PowerShell поддерживает и их тоже.

Главное достоинство PowerShell — работа с объектами, как и в Murex или Nushell, а не просто с текстом. Это особенно заметно при объединении команд в цепочки:

Здесь Get-ChildItem и Select-Object — специальные команды (Cmdlet'ы) на базе .NET, которые отлично сочетаются друг с другом в едином пайплайне.

PowerShell вызывает лёгкую ностальгию у тех, кто помнит DOS прошлых лет, но для меня, как пользователя macOS и Linux, возвращение к "ретро" не кажется привлекательным. Если же вы часто работаете и в Windows, и в Linux — эта оболочка спрячет разницу между платформами.

Да, альтернативные оболочки активно развиваются и готовы составить конкуренцию привычному bash, но тот по-прежнему вне конкуренции и для большинства останется основным выбором. Всё же знать про современные варианты и их уникальные фишки полезно — иногда они экономят массу времени и действительно вдохновляют на эксперименты. Но до полной революции не хватает поддержки POSIX: большинству альтернатов пока суждено оставаться нишевыми.

Если вам понравилась эта статья, подпишитесь, чтобы не пропустить еще много полезных статей!

Премиум подписка - это доступ к эксклюзивным материалам, чтение канала без рекламы, возможность предлагать темы для статей и даже заказывать индивидуальные обзоры/исследования по своим запросам!Подробнее о том, какие преимущества вы получите с премиум подпиской, можно узнать здесь

Также подписывайтесь на нас в: