Не так давно я попробовал новую для себя командную оболочку 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
Хорошего дня!