![](https://habrastorage.org/webt/hs/gj/gx/hsgjgxplmgg59yj95nyxyqdzcmm.png)
Авторы проекта, вдохновившись возможностями 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 килобайт:
![](https://habrastorage.org/webt/vn/pt/gt/vnptgtwkopd_znftzt3fwajoloi.png)
… или вывод процессов, нагружающих CPU:
![](https://habrastorage.org/webt/mf/mz/nj/mfmznjpa0kepj-uaffshlqt99ri.png)
Расширение функциональных возможностей nushell возможно с помощью плагинов, представляемых в виде бинарников, взаимодействующих с Nu через простой протокол JSON-RPC.
Авторы проекта уже работают над созданием книги про свою оболочку на английском и испанском языках.
Быстро попробовать nushell можно в Docker-контейнере:
$ docker build -t nu .
$ docker run -it nu
… а процесс полноценной установки описан здесь.
Комментарии (14)
OnYourLips
29.08.2019 19:14+1Похоже на ps с чуть более приятным написанием команд. Но киллерфичи в статье не описаны. Для сравнения
ls | where size > 10kb
Get-ChildItem | Where-Object {$_.Length -gt 10KB}
ziv
29.08.2019 19:54Автодополнения пока не завезли, без них практически не представляю использование шелла.
github.com/nushell/nushell/issues/290
glowingsword
28.08.2019 22:14На первый взгляд идея выглядит интересно. Но то ли bash меня разбаловал, то ли функционал у данной оболочки пока очень даже небольшой. Не вижу условий, циклов, массивов, возможности запустить что-то в дочерней оболочке и сохранить выхлоп в переменную и т.п. Получается, что скриптовать что-либо на этом чуде не реально. Боюсь, что пройдут годы, пока в него завезут весь необходимый функционал.
saipr
28.08.2019 23:51-2А помимо bash, есть еще и tcl, который меня разбаловал -)
glowingsword
30.08.2019 20:02+1Tcl использовал всего пару раз. Приятный ЯП. А вообще обычно до него дело не доходило. Хватало и bash с головой, современный bash очень неплох. А там где не хватало — брал сразу ruby/python.
saipr
30.08.2019 22:05Shell — классика. Брал все — и ruby и python и perl и php и т.д, но лучше все же tcl, просто надо хоть раз на нем серьезно поработать.
За объективность — спасибо.glowingsword
30.08.2019 22:43+1Впечатляет. Вы и графическую морду на Tk к скрипту на Tcl прикрутили. Хорошая связка. Tk под питон тоже неплох, но такой органичной интеграции как с Tcl на нём не получить…
procode
29.08.2019 07:24мерси. заценим. а то задрало уже между мингв и кмд переключаться постоянно. хочется чего-то универсального под винду.
mjr27
30.08.2019 12:43Дисклеймер: что-то чувствую себя евангелистом. Я реально не хотел, так совпало.
Powershell универсален. Сейчас использую его как дефолтный шелл под обе операционки.
Не идеал, но разумно близкое к нему приближение
podivilov
Спасибо за статью!