Aller au contenu

Aide-Mémoire Nushell - Shell Moderne Structuré

Un shell moderne qui traite tout comme des données structurées au lieu de texte brut. Les pipelines fonctionnent avec des tableaux, des enregistrements et des listes — pas seulement des chaînes. Pensez-y comme un shell qui comprend nativement JSON, CSV, TOML et YAML.

PlateformeCommande
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 (ou télécharger depuis les releases GitHub)
Arch Linuxsudo pacman -S nushell
Fedora/RHELsudo dnf install nushell
Cargo (Toutes plateformes)cargo install nu
Nixnix-env -iA nixpkgs.nushell

Lancement : Exécutez nu depuis n’importe quel shell pour démarrer Nushell. Définir comme shell par défaut : chsh -s $(which nu)

Les pipelines Nushell passent des données structurées (tableaux, enregistrements, listes), pas du texte :

# Shell traditionnel : texte → grep → awk → texte
# Nushell : tableau → where → select → tableau

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

Types de données : chaînes, entiers, flottants, booléens, dates, durées, tailles de fichiers, listes, enregistrements, tableaux

CommandeDescription
lsLister le répertoire comme un tableau structuré
ls -laLister tous les fichiers (y compris cachés) au format long
cd path/to/dirChanger de répertoire
cp source destCopier des fichiers ou répertoires
mv source destDéplacer ou renommer des fichiers
rm fileSupprimer des fichiers
mkdir dirnameCréer un répertoire
open file.jsonOuvrir un fichier comme données structurées (détecte automatiquement le format)
open file.csvOuvrir un CSV comme tableau
open file.tomlOuvrir un TOML comme enregistrement
save output.jsonSauvegarder la sortie du pipeline dans un fichier
cat file.txtAfficher le contenu du fichier comme texte
psAfficher les processus en cours comme tableau
sysAfficher les informations système
which commandTrouver l’emplacement de la commande
help commandsLister toutes les commandes disponibles
help <command>Afficher l’aide pour une commande spécifique
CommandeDescription
ls | where size > 10mbFiltrer les fichiers supérieurs à 10 Mo
ls | where name =~ "\.rs$"Filtrer par regex sur le nom de fichier
ls | where type == "dir"Afficher uniquement les répertoires
ls | where modified > 2dayFichiers modifiés dans les 2 derniers jours
ls | select name sizeAfficher uniquement les colonnes name et size
ls | reject typeSupprimer la colonne type
ls | get nameExtraire uniquement la colonne name comme liste
ls | first 5Afficher les 5 premières entrées
ls | last 3Afficher les 3 dernières entrées
ls | skip 10Sauter les 10 premières entrées
ls | nth 0 2 4Sélectionner les entrées par index
ls | lengthCompter le nombre d’entrées
ls | uniqSupprimer les entrées en double
CommandeDescription
ls | sort-by sizeTrier par taille croissante
ls | sort-by size --reverseTrier par taille décroissante
ls | sort-by nameTrier alphabétiquement
ls | group-by typeGrouper les entrées par type
ls | group-by {get name | path parse | get extension}Grouper par extension de fichier
CommandeDescription
"hello world" | str upcaseConvertir en majuscules
"HELLO" | str downcaseConvertir en minuscules
" hello " | str trimSupprimer les espaces blancs
"hello" | str contains "ell"Vérifier si la chaîne contient une sous-chaîne
"hello" | str replace "l" "L"Remplacer des caractères
"hello world" | split row " "Diviser la chaîne en liste
["hello" "world"] | str join ", "Joindre une liste en chaîne
"hello" | str lengthObtenir la longueur de la chaîne
"hello" | str starts-with "he"Vérifier le préfixe de la chaîne
CommandeDescription
open data.json | get field_nameAccéder à un champ dans JSON
open data.json | get nested.fieldAccéder à des champs imbriqués
{name: "Alice", age: 30}Créer un enregistrement
[1 2 3 4 5]Créer une liste
[[name age]; [Alice 30] [Bob 25]]Créer un tableau
$data | to jsonConvertir en JSON
$data | to csvConvertir en CSV
$data | to tomlConvertir en TOML
$data | to yamlConvertir en YAML
$data | to mdConvertir en tableau Markdown
CommandeDescription
[1 2 3 4] | math sumSomme des valeurs
[1 2 3 4] | math avgMoyenne des valeurs
[1 2 3 4] | math maxValeur maximale
[1 2 3 4] | math minValeur minimale
[1 2 3 4] | math medianValeur médiane
ls | get size | math sumTaille totale des fichiers listés
1 + 2Arithmétique de base
10 / 3Division
2 ** 8Exponentiation
CommandeDescription
http get https://api.example.com/dataRécupérer une URL et analyser la réponse
http post https://api.example.com/data {key: "value"}Requête POST avec corps
fetch url | get fieldRécupérer et extraire un champ spécifique
# Variables (immuables par défaut)
let name = "Alice"
let count = 42
let files = (ls | where size > 1mb)

# Variables mutables
mut counter = 0
$counter += 1

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

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

# Commandes personnalisées (fonctions)
def greet [name: string] { $"Hello, ($name)!" }
greet "World"
FichierObjectif
$nu.config-pathConfiguration principale (config.nu)
$nu.env-pathConfiguration d’environnement (env.nu)
# Afficher l'emplacement du fichier de configuration
$nu.config-path

# Éditer la configuration
config nu    # Ouvrir config.nu dans l'éditeur
config env   # Ouvrir env.nu dans l'éditeur
# Dans config.nu
$env.config = {
    show_banner: false           # Désactiver la bannière de bienvenue
    table: {
        mode: rounded            # Style de tableau : rounded, compact, thin, none
    }
    completions: {
        algorithm: "fuzzy"       # Complétion à la tabulation floue
    }
    history: {
        max_size: 10000          # Entrées d'historique à conserver
        file_format: "sqlite"    # sqlite ou plaintext
    }
}
# Trouver les fichiers les plus volumineux dans un projet
ls **/* | where type == "file" | sort-by size --reverse | first 20

# Analyser et interroger une API JSON
http get https://api.github.com/repos/nushell/nushell | select stargazers_count forks_count

# Convertir entre formats
open data.csv | to json | save data.json

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

# Aperçu rapide du système
sys | get host
ps | sort-by cpu --reverse | first 10
FonctionnalitéBash/ZshNushell
Modèle de donnéesFlux de texteTableaux structurés
Analyse de sortiegrep, awk, sedwhere, select, get intégrés
Gestion JSONNécessite jqNatif (open file.json)
Gestion des erreursCodes de sortieMessages d’erreur riches
Complétion à la tabulationBasiqueContextuelle
Système de typesAucunEntiers, chaînes, dates, tailles, etc.
Courbe d’apprentissageFamilierNouvelle syntaxe à apprendre
Commandes externesNatifEntièrement supportées