Назад к обновлениям
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 and 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, функциональных языках программирования и современных инструментах командной строки. Вместо того чтобы рассматривать файлы и данные как необработанные потоки текста, 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  │ ppid │   name    │ user │ status  │  cpu  │  cpu_time  │   mem    │
# => ├───┼───────┼──────┼───────────┼──────┼─────────┼───────┼────────────┼──────────┤
# => │ 0 │  2240 │ 9872 │ Slack.exe │ dev  │ Running │ 16.40 │ 1min 12sec │ 178.3 MB │
# => │ 1 │ 16948 │ 9872 │ Slack.exe │ dev  │ Running │ 16.32 │      48sec │ 205.0 MB │
# => │ 2 │ 17700 │ 4632 │ nu.exe    │ dev  │ Running │  3.77 │       2sec │  26.1 MB │
# => ╰───┴───────┴──────┴───────────┴──────┴─────────┴───────┴────────────┴──────────╯

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

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}   │
# => ╰──────────────────┴────────────────────╯

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

Категории