Быстрые ссылки
Если вы используете Linux, наверняка привыкли работать в терминале через bash или zsh. Возможно, слышали и про старые sh или csh, а также про альтернативу — fish. Но что же скрывают совсем новые оболочки? Могут ли они действительно сделать вашу работу проще и приятнее?
fish: дружелюбная и интуитивная оболочка
fish — пожалуй, самая популярная из современных альтернатив bash. Она славится своим удобством: здесь мощная система автодополнения, подсветка синтаксиса и подсказки прямо по ходу работы.
Установить fish просто: в Linux и macOS достаточно ввести brew install fish или apt-get install fish.
Если вам нравится автодополнение в zsh, в fish вы почувствуете себя дома. Как только начинаете набирать команду, тут же видите подсказку — в сером цвете после уже введённого текста:
Подсказки строятся на истории ваших команд и актуальных путях к файлам, так что автодополнение действительно адаптируется под пользователя. Продолжаете печатать — fish меняет вариант на подходящий. Принять подсказку можно стрелкой вправо, а клавиша Tab покажет все возможные варианты, между которыми можно легко переключаться стрелками:
Если ищете автодополнение для самой команды, fish покажет все подходящие варианты — с краткими пояснениями для каждой:
Нужно узнать доступные опции команды? Просто нажмите Tab сразу после дефиса — откроется список опций с описаниями:
fish легко настраивается, хотя и отличается от классических shell своим подходом. Например, чтобы изменить prompt (текст перед курсором), fish уже по умолчанию предлагает яркий и информативный вариант:
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:
Для работы с ними в Murex используются специальные аналоги классических команд. Пример — команда f, общий ls с возможностью фильтрации по нужному флагу:
Отличие в том, что результат — полноценный JSON-массив, а не просто строка:
Аналогично, команда g — это современная версия glob из bash.
Murex использует свои собственные "каналы" передачи данных: в отличие от обычных оболочек, это не просто потоки строк, а реально структурированные объекты.
Вместо обычной вертикальной черты (|) появляется универсальный канал =>, который сохраняет структуру данных даже при передаче их между внешними командами. Пример работы:
В стандартном случае канал сжимает всё в одну строку, а новый вариант передаёт каждый элемент списка отдельно, поэтому 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: большинству альтернатов пока суждено оставаться нишевыми.
Если вам понравилась эта статья, подпишитесь, чтобы не пропустить еще много полезных статей!
Премиум подписка - это доступ к эксклюзивным материалам, чтение канала без рекламы, возможность предлагать темы для статей и даже заказывать индивидуальные обзоры/исследования по своим запросам!Подробнее о том, какие преимущества вы получите с премиум подпиской, можно узнать здесь
Также подписывайтесь на нас в:
- Telegram: https://t.me/gergenshin
- Youtube: https://www.youtube.com/@gergenshin
- Яндекс Дзен: https://dzen.ru/gergen
- Официальный сайт: https://www-genshin.ru