company_banner

nushell — современный shell, сочетающий Unix-конвейеры и объекты в духе PowerShell

    На днях был представлен проект nushell (краткое название — Nu). Он появился благодаря идеям из «философии классических конвейеров в Unix, подхода со структурированными данными из PowerShell, функционального программирования, системного программирования и так далее». На GitHub проект лаконично описан как «современный shell эры GitHub, написанный на Rust».



    Авторы проекта, вдохновившись возможностями PowerShell и даже несмотря на свои привычки и любовь к Bash/zsh/fish…, руководствовались следующими мыслями при создании нового проекта:

    А что, если мы возьмём идеи структурированного шелла и сделаем его более функциональным (в противовес объектно-ориентированному)? А что, если, как PowerShell, он работал бы в Windows, Linux и macOS? А если, если бы у него были классные сообщения об ошибках?

    Результат не заставил себя долго ждать. Исходный код nushell написали на Rust (в проекте активно используются его многочисленные возможности: async/await, async streams, Serde, — а также многочисленные пакеты, т.е. crates) и опубликовали на условиях свободной лицензии MIT. С момента анонса Nu прошло 5 дней, за которые ему удалось собрать уже почти 3000 звёзд на GitHub.

    Цели проекта обозначены следующим образом:

    • Кроссплатформенность. Применяемые команды и техники должны переноситься между платформами. Обеспечивается полноценная поддержка операционных систем Windows, macOS и Linux.
    • Совместимость с существующими специфичными для платформ бинарниками, стоящими во главе привычных для многих рабочих процессов (в качестве примеров авторы приводят git и vim).
    • Соответствие актуальных на сегодня ожиданиям по удобству использования командной оболочки.
    • Объектный shell (как PowerShell), предлагающий структурированное и неструктурированное представления данных.
    • Использование конвейеров (как Unix pipelines) для загрузки, изменения и сохранения данных без их фактического изменения.

    Среди базовых команд nushell заявлены не нуждающиеся в особых комментариях cd, cp, ls, mkdir, mv, date, ps, rm, exit и другие. Куда интереснее могут оказаться доступные фильтры. Вот некоторые их примеры для структурированных данных (таблиц):

    • pick и reject — выбрать/убрать столбцы для отображения;
    • sort-by — сортировать по столбцам;
    • where — условие для выборки;
    • add — добавить новое поле;
    • sum — суммирования значения в столбце;
    • to-array, from-array — преобразовать строки в массив (список) и наоборот;
    • to-json, to-toml, to-yaml, to-csv — преобразовать таблицу в соответствующий текстовый формат;
    • и другие!

    Предусмотрены фильтры и для неструктурированных данных.

    Вот, например, как в nushell будет выглядеть отбор файлов размером более 10 килобайт:



    … или вывод процессов, нагружающих CPU:



    Расширение функциональных возможностей nushell возможно с помощью плагинов, представляемых в виде бинарников, взаимодействующих с Nu через простой протокол JSON-RPC.

    Авторы проекта уже работают над созданием книги про свою оболочку на английском и испанском языках.

    Быстро попробовать nushell можно в Docker-контейнере:

    $ docker build -t nu .
    $ docker run -it nu

    … а процесс полноценной установки описан здесь.
    Флант
    DevOps-as-a-Service, Kubernetes, обслуживание 24×7

    Комментарии 14

      0
      Спасибо за статью!
        0

        Всё-таки не удержусь: чем оно потенциально лучше, чем powershell?

          0
          Сам не пользуюсь PowerShell, но многие жалуются, что PowerShell слишком сложен/избыточен/медлителен/неудобен для повседневного использования именно в качестве shell'а. Множество таких мнений можно найти в обсуждении анонса nushell на Hacker News:1 (с последующими ответами), 2, 3, …
          +2

          Похоже на ps с чуть более приятным написанием команд. Но киллерфичи в статье не описаны. Для сравнения


          ls | where size > 10kb
          Get-ChildItem | Where-Object {$_.Length -gt 10KB}

            +1

            справедливости ради, в реальном ps это выглядит как


             ls | where -p length -gt 10kb
              0
              Или даже так:
              ls | ? le* -gt 10kb
            +2
            Автодополнения пока не завезли, без них практически не представляю использование шелла.
            github.com/nushell/nushell/issues/290
              0
              На первый взгляд идея выглядит интересно. Но то ли bash меня разбаловал, то ли функционал у данной оболочки пока очень даже небольшой. Не вижу условий, циклов, массивов, возможности запустить что-то в дочерней оболочке и сохранить выхлоп в переменную и т.п. Получается, что скриптовать что-либо на этом чуде не реально. Боюсь, что пройдут годы, пока в него завезут весь необходимый функционал.
                –2

                А помимо bash, есть еще и tcl, который меня разбаловал -)

                  +1
                  Tcl использовал всего пару раз. Приятный ЯП. А вообще обычно до него дело не доходило. Хватало и bash с головой, современный bash очень неплох. А там где не хватало — брал сразу ruby/python.
                    0

                    Shell — классика. Брал все — и ruby и python и perl и php и т.д, но лучше все же tcl, просто надо хоть раз на нем серьезно поработать.
                    За объективность — спасибо.

                      +1
                      Впечатляет. Вы и графическую морду на Tk к скрипту на Tcl прикрутили. Хорошая связка. Tk под питон тоже неплох, но такой органичной интеграции как с Tcl на нём не получить…
                0
                мерси. заценим. а то задрало уже между мингв и кмд переключаться постоянно. хочется чего-то универсального под винду.
                  0

                  Дисклеймер: что-то чувствую себя евангелистом. Я реально не хотел, так совпало.


                  Powershell универсален. Сейчас использую его как дефолтный шелл под обе операционки.


                  Не идеал, но разумно близкое к нему приближение

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

                Самое читаемое