На днях был представлен проект 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
… а процесс полноценной установки описан здесь.
Автор: shurup