Torna agli aggiornamenti
New releaseAug 30, 2026

nushell v0.115.0

Un nuovo tipo di shell

Condividi

Nushell

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

Un nuovo tipo di shell.

Esempio di nushell

Indice dei contenuti

Stato

Questo progetto ha raggiunto un livello di qualità di prodotto minimo funzionante. Molte persone lo usano come shell quotidiana, ma potrebbe essere instabile per alcuni comandi. Il design di Nu è soggetto a modifiche man mano che matura.

Imparare Nu

Il libro di Nushell è la fonte principale della documentazione di Nushell. Puoi trovare un elenco completo dei comandi di Nu nel libro, e abbiamo molti esempi di utilizzo di Nu nel nostro cookbook.

Siamo anche attivi su Discord; vieni a chiacchierare con noi!

Installazione

Per installare rapidamente Nu:

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

Per usare Nu in GitHub Action, consulta setup-nu per maggiori dettagli.

Istruzioni di installazione dettagliate si trovano nel capitolo sull'installazione del libro. Nu è disponibile tramite molti gestori di pacchetti:

Packaging status

Per i dettagli su quali piattaforme il team di Nushell supporta attivamente, consulta la nostra policy di supporto alle piattaforme.

Configurazione

Le configurazioni predefinite si trovano in sample_config che sono i file di configurazione che si ottengono quando si avvia Nushell per la prima volta.

Imposta tutta la configurazione predefinita per eseguire Nushell. Da qui si può poi personalizzare questo file in base alle proprie esigenze specifiche.

Per vedere dove si trova config.nu sul tuo sistema, basta digitare questo comando.

$nu.config-path

Consulta il nostro libro per tutta la documentazione di Nushell.

Filosofia

Nu trae ispirazione da progetti come PowerShell, linguaggi di programmazione funzionale e strumenti CLI moderni. Invece di pensare a file e dati come flussi grezzi di testo, Nu considera ogni input come qualcosa con una struttura. Ad esempio, quando elenchi il contenuto di una directory, ciò che ottieni è una tabella di righe, dove ogni riga rappresenta un elemento in quella directory. Questi valori possono essere passati attraverso una serie di passaggi, in una serie di comandi chiamata 'pipeline'.

Pipeline

In Unix, è comune usare pipe tra comandi per suddividere un comando complesso in più passaggi. Nu fa un passo avanti e si basa fortemente sull'idea di pipeline. Come nella filosofia Unix, Nu consente ai comandi di scrivere su stdout e leggere da stdin. Inoltre, i comandi possono produrre dati strutturati (puoi pensarli come un terzo tipo di flusso). I comandi che funzionano nella pipeline rientrano in una di tre categorie:

  • Comandi che producono un flusso (es., ls)
  • Comandi che filtrano un flusso (es., where type == "dir")
  • Comandi che consumano l'output della pipeline (es., table)

I comandi sono separati dal simbolo pipe (|) per indicare una pipeline che scorre da sinistra a destra.

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

Poiché la maggior parte delle volte vorrai vedere l'output di una pipeline, table è assunto. Avremmo potuto anche scrivere quanto sopra:

ls | where type == "dir"

Essere in grado di usare gli stessi comandi e comporli in modo diverso è una filosofia importante in Nu. Ad esempio, potremmo usare il comando integrato ps per ottenere un elenco dei processi in esecuzione, usando lo stesso where di cui sopra.

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

Aprire file

Nu può caricare contenuti di file e URL come testo grezzo o dati strutturati (se riconosce il formato). Ad esempio, puoi caricare un file .toml come dati strutturati ed esplorarlo:

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

Possiamo passare questo a un comando che ottiene il contenuto di una delle colonne:

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

E se necessario possiamo approfondire ulteriormente:

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

Plugin

Nu supporta plugin che offrono funzionalità aggiuntive alla shell e seguono lo stesso modello di dati strutturati usato dai comandi integrati. Ci sono alcuni esempi nelle directory crates/nu_plugins_*.

I plugin sono binari disponibili nel tuo PATH e seguono una convenzione di denominazione nu_plugin_*. Questi binari interagiscono con nu tramite un semplice protocollo JSON-RPC in cui il comando si identifica e trasmette la sua configurazione, rendendolo disponibile per l'uso. Se il plugin è un filtro, i dati fluiscono verso di esso un elemento alla volta, e può restituire dati in streaming tramite stdin/stdout. Se il plugin è un sink, riceve il vettore completo dei dati finali e ha piena libertà su stdin/stdout per usarli come preferisce.

Il repo awesome-nu elenca una varietà di nu-plugin, mentre il repo showcase mostra post di blog informativi scritti su Nushell insieme a video che evidenziano argomenti tecnici presentati.

Obiettivi

Nu aderisce strettamente a un insieme di obiettivi che costituiscono la sua filosofia di design. Man mano che vengono aggiunte funzionalità, queste vengono verificate rispetto a questi obiettivi.

  • Prima di tutto, Nu è multipiattaforma. Comandi e tecniche dovrebbero funzionare su tutte le piattaforme e Nu ha supporto di prima classe per Windows, macOS e Linux.

  • Nu garantisce la compatibilità con gli eseguibili specifici della piattaforma esistenti.

  • Il flusso di lavoro e gli strumenti di Nu dovrebbero avere l'usabilità attesa dal software moderno nel 2022 (e oltre).

  • Nu considera i dati come strutturati o non strutturati. È una shell strutturata come PowerShell.

  • Infine, Nu considera i dati in modo funzionale. Invece di usare la mutazione, le pipeline agiscono come un mezzo per caricare, modificare e salvare dati senza stato mutabile.

Supportato ufficialmente da

Invia una issue o una PR per essere aggiunto a questo elenco.

Contribuire

Consulta Contribuire per i dettagli. Grazie a tutte le persone che hanno già contribuito!

Licenza

Il progetto è reso disponibile sotto la licenza MIT. Consulta il file LICENSE per maggiori informazioni.

Categorie