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

в 15:08, , рубрики: cli, nushell, open source, Rust, shell, Блог компании Флант, консоль, Оболочки, системное администрирование

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

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

Авторы проекта, вдохновившись возможностями 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 килобайт:

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

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

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

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

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

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

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

… а процесс полноценной установки описан здесь.

Автор: shurup

Источник


* - обязательные к заполнению поля