Назад к обновлениям
New releaseAug 30, 2026

nushell v0.115.0

Новый тип оболочки

Поделиться

Nushell

Crates.io Build Status Nightly Build Discord The Changelog #363 GitHub commit activity GitHub contributors

Новый тип оболочки.

Пример nushell

Содержание

Статус

Этот проект достиг уровня качества минимально жизнеспособного продукта. Многие используют его как основную оболочку, но некоторые команды могут быть нестабильны. Дизайн Nu может меняться по мере развития.

Изучение Nu

Книга Nushell является основным источником документации Nushell. Вы можете найти полный список команд Nu в книге, а также множество примеров использования Nu в нашей поваренной книге.

Мы также активны на Discord; заходите и пообщайтесь с нами!

Установка

Для быстрой установки Nu:

# Linux и macOS
brew install nushell
# Windows
winget install nushell

Чтобы использовать Nu в GitHub Action, обратитесь к setup-nu для получения более подробной информации.

Подробные инструкции по установке можно найти в главе об установке в книге. Nu доступен через множество менеджеров пакетов:

Packaging status

Подробнее о том, какие платформы активно поддерживает команда Nushell, см. в нашей политике поддержки платформ.

Конфигурация

Конфигурации по умолчанию можно найти в sample_config — это файлы конфигурации, которые пользователь получает при первом запуске Nushell.

Они задают все настройки по умолчанию для работы Nushell. Отсюда можно настроить этот файл под свои конкретные нужды.

Чтобы узнать, где на вашей системе находится config.nu, просто выполните эту команду.

$nu.config-path

Пожалуйста, обратитесь к нашей книге за всей документацией Nushell.

Философия

Nu черпает вдохновение из таких проектов, как PowerShell, функциональные языки программирования и современные CLI-инструменты. Вместо того чтобы рассматривать файлы и данные как необработанные потоки текста, Nu воспринимает каждый входной элемент как нечто, имеющее структуру. Например, когда вы выводите содержимое каталога, вы получаете таблицу строк, где каждая строка представляет элемент этого каталога. Эти значения могут передаваться через ряд шагов, в последовательности команд, называемой «конвейером».

Конвейеры

В Unix принято объединять команды в конвейеры, чтобы разбить сложную команду на несколько шагов. Nu делает ещё один шаг вперёд и активно развивает идею конвейеров. Как и в философии Unix, Nu позволяет командам выводить данные в stdout и читать из stdin. Кроме того, команды могут выводить структурированные данные (можно считать это третьим видом потока). Команды, работающие в конвейере, делятся на три категории:

  • Команды, которые создают поток (например, ls)
  • Команды, которые фильтруют поток (например, where type == "dir")
  • Команды, которые потребляют вывод конвейера (например, table)

Команды разделяются символом конвейера (|), обозначающим поток слева направо.

ls | where type == "dir" | table
# => ╭────┬──────────┬──────┬─────────┬───────────────╮
# => │ #  │   name   │ type │  size   │   modified    │
# => ├────┼──────────┼──────┼─────────┼───────────────┤
# => │  0 │ .cargo   │ dir  │     0 B │ 9 minutes ago │
# => │  1 │ assets   │ dir  │     0 B │ 2 weeks ago   │
# => │  2 │ crates   │ dir  │ 4.0 KiB │ 2 weeks ago   │
# => │  3 │ docker   │ dir  │     0 B │ 2 weeks ago   │
# => │  4 │ docs     │ dir  │     0 B │ 2 weeks ago   │
# => │  5 │ images   │ dir  │     0 B │ 2 weeks ago   │
# => │  6 │ pkg_mgrs │ dir  │     0 B │ 2 weeks ago   │
# => │  7 │ samples  │ dir  │     0 B │ 2 weeks ago   │
# => │  8 │ src      │ dir  │ 4.0 KiB │ 2 weeks ago   │
# => │  9 │ target   │ dir  │     0 B │ a day ago     │
# => │ 10 │ tests    │ dir  │ 4.0 KiB │ 2 weeks ago   │
# => │ 11 │ wix      │ dir  │     0 B │ 2 weeks ago   │
# => ╰────┴──────────┴──────┴─────────┴───────────────╯

Поскольку в большинстве случаев вы захотите увидеть вывод конвейера, table подразумевается по умолчанию. Мы могли бы также написать вышеуказанное так:

ls | where type == "dir"

Возможность использовать одни и те же команды и по-разному их комбинировать — важная философия Nu. Например, мы можем использовать встроенную команду ps для получения списка запущенных процессов, используя тот же where, что и выше.

ps | where cpu > 0
# => ╭───┬───────┬───────────┬───────┬───────────┬───────────╮
# => │ # │  pid  │   name    │  cpu  │    mem    │  virtual  │
# => ├───┼───────┼───────────┼───────┼───────────┼───────────┤
# => │ 0 │  2240 │ Slack.exe │ 16.40 │ 178.3 MiB │ 232.6 MiB │
# => │ 1 │ 16948 │ Slack.exe │ 16.32 │ 205.0 MiB │ 197.9 MiB │
# => │ 2 │ 17700 │ nu.exe    │  3.77 │  26.1 MiB │   8.8 MiB │
# => ╰───┴───────┴───────────┴───────┴───────────┴───────────╯

Открытие файлов

Nu может загружать содержимое файлов и URL-адресов как необработанный текст или как структурированные данные (если формат распознан). Например, вы можете загрузить файл .toml как структурированные данные и изучить его:

open Cargo.toml
# => ╭──────────────────┬────────────────────╮
# => │ bin              │ [table 1 row]      │
# => │ dependencies     │ {record 25 fields} │
# => │ dev-dependencies │ {record 8 fields}  │
# => │ features         │ {record 10 fields} │
# => │ package          │ {record 13 fields} │
# => │ patch            │ {record 1 field}   │
# => │ profile          │ {record 3 fields}  │
# => │ target           │ {record 3 fields}  │
# => │ workspace        │ {record 1 field}   │
# => ╰──────────────────┴────────────────────╯

Мы можем передать это в команду, которая получает содержимое одного из столбцов:

open Cargo.toml | get package
# => ╭───────────────┬────────────────────────────────────╮
# => │ authors       │ [list 1 item]                      │
# => │ default-run   │ nu                                 │
# => │ description   │ A new type of shell                │
# => │ documentation │ https://www.nushell.sh/book/       │
# => │ edition       │ 2018                               │
# => │ exclude       │ [list 1 item]                      │
# => │ homepage      │ https://www.nushell.sh             │
# => │ license       │ MIT                                │
# => │ metadata      │ {record 1 field}                   │
# => │ name          │ nu                                 │
# => │ repository    │ https://github.com/nushell/nushell │
# => │ rust-version  │ 1.60                               │
# => │ version       │ 0.72.0                             │
# => ╰───────────────┴────────────────────────────────────╯

И при необходимости мы можем углубиться ещё дальше:

open Cargo.toml | get package.version
# => 0.72.0

Плагины

Nu поддерживает плагины, которые предоставляют дополнительные функции оболочке и следуют той же модели структурированных данных, что и встроенные команды. Несколько примеров находятся в каталогах crates/nu_plugins_*.

Плагины — это бинарные файлы, доступные в вашем PATH и следующие соглашению об именовании nu_plugin_*. Эти бинарные файлы взаимодействуют с nu через простой протокол JSON-RPC, в котором команда идентифицирует себя и передаёт свою конфигурацию, делая её доступной для использования. Если плагин является фильтром, данные поступают к нему по одному элементу за раз, и он может возвращать данные обратно через stdin/stdout. Если плагин является приёмником (sink), ему передаётся полный вектор итоговых данных, и он получает полную свободу действий с stdin/stdout по своему усмотрению.

В репозитории awesome-nu перечислены различные nu-плагины, а репозиторий showcase демонстрирует информативные статьи в блогах, написанные о Nushell, а также видео, освещающие технические темы, которые были представлены.

Цели

Nu строго придерживается набора целей, составляющих его дизайнерскую философию. По мере добавления функций они проверяются на соответствие этим целям.

  • Прежде всего, Nu является кроссплатформенным. Команды и методы должны работать на всех платформах, и Nu имеет полноценную поддержку Windows, macOS и Linux.

  • Nu обеспечивает совместимость с существующими платформо-специфичными исполняемыми файлами.

  • Рабочий процесс и инструменты Nu должны обладать удобством использования, ожидаемым от современного программного обеспечения в 2022 году (и далее).

  • Nu рассматривает данные как структурированные или неструктурированные. Это структурированная оболочка, как PowerShell.

  • Наконец, Nu рассматривает данные функционально. Вместо использования мутаций конвейеры служат средством загрузки, изменения и сохранения данных без изменяемого состояния.

Официально поддерживается

Пожалуйста, отправьте issue или PR, чтобы быть добавленным в этот список.

Участие в разработке

Подробности см. в разделе Contributing. Спасибо всем, кто уже внёс свой вклад!

Лицензия

Проект доступен под лицензией MIT. Дополнительную информацию см. в файле LICENSE.

Категории