главная

26 июня 2026 г.

nushell - интересная альтернатива привычным shell

Не так давно я попробовал новую для себя командную оболочку nushell и был приятно удивлен.

Стоит начать с того, что обычно я использую fish и ценю ее за простоту конфигурации и удобство из коробки. nushell также неплоха сразу из коробки: есть автодополнение команд исходя из истории, базовая подсветка синтаксиса и так далее.

Самое же интересное в nushell - это работа со структурированными данными.

~> http get https://api.github.com/repos/nushell/nushell | get license

Команда состоит из двух частей, соединённых пайпом (|) - оператором, который передаёт результат работы одной команды на вход следующей. Это ключевая идея Nushell: данные текут по конвейеру не как обычный текст (как в bash), а как структурированные объекты — таблицы и записи (records), с которыми можно работать напрямую, без парсинга строк.

Разберем нашу команду:

  • http get https://api.github.com/repos/nushell/nushell - отправляет get запрос на API Github. Команда http встроена в nushell и автоматически структурирует ответ от сервера.
  • | - пайп оператор, передает уже структурированные данные, полученные команду http get в следующую команду в качестве входных данные
  • get license - достает поле license

Вот что выводит эта команда:

╭─────────┬─────────────────────────────────────╮
│ key     │ mit                                 │
│ name    │ MIT License                         │
│ spdx_id │ MIT                                 │
│ url     │ https://api.github.com/licenses/mit │
│ node_id │ MDc6TGljZW5zZTEz                    │
╰─────────┴─────────────────────────────────────╯

Предположим мы хотим получить только название лицензии, а остальное нас не интересует. Тогда команда превратится в:

~> http get https://api.github.com/repos/nushell/nushell | get license | get name
MIT License

Такой подход значительно упрощает работу со структурированными данными из командной строки. Вот пример использования сортировки и фильтрации для получения трех самых тяжелых файлов в текущей папке:

~> ls | sort-by size --reverse | first 3

В общем возможностей nushell предоставляет много. Советую сходить на официальный сайт и попробовать самим: https://www.nushell.sh/book/quick_tour.html#acting-on-data

Хорошего дня!