Salta ai contenuti

Nushell - Scheda di Riferimento Shell Strutturata Moderna

Nushell - Scheda di Riferimento Shell Strutturata Moderna

Sezione intitolata “Nushell - Scheda di Riferimento Shell Strutturata Moderna”

Una shell moderna che tratta tutto come dati strutturati invece di testo grezzo. Le pipeline funzionano con tabelle, record e liste — non solo stringhe. Pensala come una shell che comprende nativamente JSON, CSV, TOML e YAML.

PiattaformaComando
macOS (Homebrew)brew install nushell
Windows (Winget)winget install nushell
Windows (Chocolatey)choco install nushell
Windows (Scoop)scoop install nu
Ubuntu/Debiansudo apt install nushell (o scarica dalle release GitHub)
Arch Linuxsudo pacman -S nushell
Fedora/RHELsudo dnf install nushell
Cargo (Tutte le piattaforme)cargo install nu
Nixnix-env -iA nixpkgs.nushell

Avvio: Esegui nu da qualsiasi shell per avviare Nushell. Imposta come shell predefinita: chsh -s $(which nu)

Le pipeline Nushell passano dati strutturati (tabelle, record, liste), non testo:

# Shell tradizionale: testo → grep → awk → testo
# Nushell: tabella → where → select → tabella

ls | where size > 1mb | sort-by size --reverse | first 5

Tipi di dati: stringhe, interi, float, booleani, date, durate, dimensioni file, liste, record, tabelle

ComandoDescrizione
lsElenca directory come tabella strutturata
ls -laElenca tutti i file (inclusi nascosti) in formato lungo
cd path/to/dirCambia directory
cp source destCopia file o directory
mv source destSposta o rinomina file
rm fileRimuovi file
mkdir dirnameCrea directory
open file.jsonApri file come dati strutturati (rileva automaticamente il formato)
open file.csvApri CSV come tabella
open file.tomlApri TOML come record
save output.jsonSalva output pipeline su file
cat file.txtVisualizza contenuti file come testo
psMostra processi in esecuzione come tabella
sysMostra informazioni di sistema
which commandTrova posizione comando
help commandsElenca tutti i comandi disponibili
help <command>Mostra aiuto per un comando specifico
ComandoDescrizione
ls | where size > 10mbFiltra file più grandi di 10 MB
ls | where name =~ "\.rs$"Filtra per regex sul nome file
ls | where type == "dir"Mostra solo le directory
ls | where modified > 2dayFile modificati negli ultimi 2 giorni
ls | select name sizeMostra solo colonne nome e dimensione
ls | reject typeRimuovi la colonna tipo
ls | get nameEstrai solo la colonna nome come lista
ls | first 5Mostra prime 5 voci
ls | last 3Mostra ultime 3 voci
ls | skip 10Salta le prime 10 voci
ls | nth 0 2 4Seleziona voci per indice
ls | lengthConta numero di voci
ls | uniqRimuovi voci duplicate
ComandoDescrizione
ls | sort-by sizeOrdina per dimensione crescente
ls | sort-by size --reverseOrdina per dimensione decrescente
ls | sort-by nameOrdina alfabeticamente
ls | group-by typeRaggruppa voci per tipo
ls | group-by {get name | path parse | get extension}Raggruppa per estensione file
ComandoDescrizione
"hello world" | str upcaseConverti in maiuscolo
"HELLO" | str downcaseConverti in minuscolo
" hello " | str trimRimuovi spazi bianchi
"hello" | str contains "ell"Controlla se stringa contiene sottostringa
"hello" | str replace "l" "L"Sostituisci caratteri
"hello world" | split row " "Dividi stringa in lista
["hello" "world"] | str join ", "Unisci lista in stringa
"hello" | str lengthOttieni lunghezza stringa
"hello" | str starts-with "he"Controlla prefisso stringa
ComandoDescrizione
open data.json | get field_nameAccedi a un campo in JSON
open data.json | get nested.fieldAccedi a campi annidati
{name: "Alice", age: 30}Crea un record
[1 2 3 4 5]Crea una lista
[[name age]; [Alice 30] [Bob 25]]Crea una tabella
$data | to jsonConverti in JSON
$data | to csvConverti in CSV
$data | to tomlConverti in TOML
$data | to yamlConverti in YAML
$data | to mdConverti in tabella Markdown
ComandoDescrizione
[1 2 3 4] | math sumSomma dei valori
[1 2 3 4] | math avgMedia dei valori
[1 2 3 4] | math maxValore massimo
[1 2 3 4] | math minValore minimo
[1 2 3 4] | math medianValore mediano
ls | get size | math sumDimensione totale dei file elencati
1 + 2Aritmetica di base
10 / 3Divisione
2 ** 8Esponenziazione
ComandoDescrizione
http get https://api.example.com/dataRecupera URL e analizza risposta
http post https://api.example.com/data {key: "value"}Richiesta POST con corpo
fetch url | get fieldRecupera ed estrai campo specifico
# Variabili (immutabili per default)
let name = "Alice"
let count = 42
let files = (ls | where size > 1mb)

# Variabili mutabili
mut counter = 0
$counter += 1

# If/else
if $count > 10 { "big" } else { "small" }

# Cicli
for file in (ls) { print $file.name }
ls | each { |row| $row.name | str upcase }

# Comandi personalizzati (funzioni)
def greet [name: string] { $"Hello, ($name)!" }
greet "World"
FileScopo
$nu.config-pathConfigurazione principale (config.nu)
$nu.env-pathConfigurazione ambiente (env.nu)
# Mostra posizione file di configurazione
$nu.config-path

# Modifica configurazione
config nu    # Apri config.nu nell'editor
config env   # Apri env.nu nell'editor
# In config.nu
$env.config = {
    show_banner: false           # Disabilita banner di benvenuto
    table: {
        mode: rounded            # Stile tabella: rounded, compact, thin, none
    }
    completions: {
        algorithm: "fuzzy"       # Completamento tab fuzzy
    }
    history: {
        max_size: 10000          # Voci cronologia da mantenere
        file_format: "sqlite"    # sqlite o plaintext
    }
}
# Trova i file più grandi in un progetto
ls **/* | where type == "file" | sort-by size --reverse | first 20

# Analizza e interroga API JSON
http get https://api.github.com/repos/nushell/nushell | select stargazers_count forks_count

# Converti tra formati
open data.csv | to json | save data.json

# Analizza file di log
open access.log | lines | parse "{ip} - - [{date}] \"{method} {path} {proto}\" {status} {size}"
| where status == "404" | group-by path | sort-by -r

# Panoramica rapida del sistema
sys | get host
ps | sort-by cpu --reverse | first 10
FunzionalitàBash/ZshNushell
Modello datiFlussi di testoTabelle strutturate
Analisi outputgrep, awk, sedwhere, select, get integrati
Gestione JSONRichiede jqNativo (open file.json)
Gestione erroriCodici di uscitaMessaggi di errore ricchi
Completamento tabBaseContext-aware
Sistema di tipiNessunoInteri, stringhe, date, dimensioni, ecc.
Curva di apprendimentoFamiliareNuova sintassi da imparare
Comandi esterniNativiCompletamente supportati