Si vous utilisez encore Bash pour traiter du JSON, du CSV ou des logs système, vous êtes en train d'utiliser un marteau pour faire de la chirurgie de précision. Les shells Unix traditionnels ont été conçus dans les années 1970, quand les données étaient essentiellement du texte brut. Mais en 2026, les données sont structurées — des APIs JSON, des exports CSV, des résultats de requêtes base de données, tout est en tableaux et enregistrements.

Nushell est le shell né pour cette époque. Ce n'est pas un autre outil avec un thème flashy ou un prompt amélioré, c'est un changement de paradigme : traitez les données comme des données, pas comme du texte.

Qu'est-ce que Nushell ?

Nushell (ou nu en abrégé) est un shell moderne créé par Jonathan Turner, ancien ingénieur chez Facebook. Son idée de base est simple mais révolutionnaire :

  • Sorties structurées : chaque commande renvoie des données structurées (tableaux, listes, enregistrements), pas du texte brut
  • Typage sûr : le shell comprend les types de données — chaînes, entiers, dates, tailles de fichiers ont tous un type explicite
  • Multi-plateforme : support natif de Windows, macOS et Linux, sans besoin de WSL ou Cygwin
  • Écrit en Rust : d'excellentes performances, mémoire sécurisée, déploiement en un seul binaire

En mars 2026, Nushell en est à la version 0.111.0, avec plus de 35 000+ étoiles sur GitHub, ce qui en fait l'un des projets shell dont la croissance est la plus rapide.

Pourquoi avez-vous besoin de Nushell ?

Les douleurs des shells traditionnels

Qu'est-ce que ça donne de traiter des données structurées dans Bash ?

BASH
# Extraire un champ spécifique depuis du JSON ? Il faut jq
curl -s https://api.example.com/users | jq '.[] | select(.active==true) | .name'

# Calculer la moyenne d'une colonne dans un CSV ? Il faut awk
cat data.csv | awk -F',' 'NR>1 {sum+=$3; count++} END {print sum/count}'

# Lister les fichiers de plus de 100 Mo et les trier ? Un enfer de pipes
ls -lh | awk '$5 ~ /M/ {print $0}' | sort -k5 -h

Chaque tâche nécessite un outil différent, et vos pipes sont un mélange de awk, sed, grep et jq. La gestion d'erreurs ? La conversion de types ? Bonne chance.

La façon Nushell

NU
# Les mêmes tâches, avec une syntaxe unifiée
# Requête API JSON
http get https://api.example.com/users | where active == true | select name

# Analyse de données CSV
open data.csv | math avg --columns price

# Filtrage et tri de fichiers
ls | where size > 100MB | sort-by size

Vous voyez la différence ? Une syntaxe cohérente, des données structurées en flux, aucun outil externe nécessaire.

Installation de Nushell

Linux (méthode recommandée)

BASH
# Avec le script d'installation officiel
curl --proto '=https' --tlsv1.2 -sSf https://www.nushell.sh/install.sh | sh

# Ou avec un gestionnaire de paquets
# Ubuntu/Debian
cargo install nu

# Arch Linux
yay -S nushell

# Fedora
sudo dnf install nushell

macOS

BASH
# Homebrew
brew install nushell

# MacPorts
sudo port install nushell

Windows

POWERSHELL
# Winget (Windows 10/11)
winget install nushell

# Chocolatey
choco install nushell

# Scoop
scoop install nushell

Vérifier l'installation

BASH
nu --version
# Sortie : nu 0.111.0

Concepts clés : du texte aux données

1. Les tableaux sont des citoyens de première classe

Avec Nushell, ls ne renvoie plus des lignes de texte, mais un vrai tableau :

NU
ls
# ╭───┬──────────────────┬──────┬────────┬───────────────╮
# │ # │       name       │ type │  size  │   modified    │
# ├───┼──────────────────┼──────┼────────┼───────────────┤
# │ 0 │ docs             │ dir  │  4.0KB │ 10 minutes ago│
# │ 1 │ README.md        │ file │  2.3KB │ 2 hours ago   │
# │ 2 │ package.json     │ file │  1.1KB │ 1 day ago     │
# ╰───┴──────────────────┴──────┴────────┴───────────────╯

C'est un véritable objet tableau, que vous pouvez :

NU
# Filtrer
ls | where type == file

# Sélectionner des colonnes
ls | select name size

# Trier
ls | sort-by size -r

# Accéder à une ligne spécifique
ls | get 0.name

2. Le système de types

Nushell comprend et respecte les types de données :

NU
# Opérations numériques
echo 10 + 5        # 15 (entier)
echo 3.14 * 2      # 6.28 (flottant)

# Manipulation de chaînes
echo "hello" | str length           # 5
echo "Hello World" | str downcase   # hello world

# Gestion des dates
date now
date now | format date "%Y-%m-%d"
date now - date "2026-01-01"  # Affiche la différence en jours

# Tailles de fichiers (conversion automatique)
echo 1GB / 1MB  # 1024

3. Les pipes transmettent des valeurs, pas du texte

C'est la différence la plus cruciale. Dans Bash :

BASH
# Flux de texte, chaque commande doit parser le texte
ls -l | grep ".md" | awk '{print $9}'

Dans Nushell :

NU
# Flux de données structurées, les types sont conservés
ls | where name =~ ".md" | get name

En pratique : exemples de pipelines de données

Exemple 1 : Analyser les informations d'un repo GitHub

NU
# Récupérer les données d'un repo et les analyser
http get https://api.github.com/repos/nushell/nushell \
  | select stargazers_count forks_count open_issues language \
  | flatten

Exemple 2 : Traiter des données de vente en CSV

Supposons un fichier sales.csv :

CSV
date,product,amount,region
2026-01-01,Widget A,1500,North
2026-01-02,Widget B,2300,South
2026-01-03,Widget A,1800,North
NU
# Lire et analyser
open sales.csv \
  | where region == "North" \
  | group-by product \
  | each { |it| 
      {
        product: $it.product.0,
        total: ($it | get amount | math sum),
        count: ($it | length)
      }
    }

Exemple 3 : Tableau de bord de monitoring système

NU
# Créer un rapport d'état système
{
  hostname: (sys host | get name),
  uptime: (sys host | get uptime),
  memory: {
    total: (sys mem | get total),
    free: (sys mem | get free),
    percent_used: ((sys mem | get total) - (sys mem | get free)) / (sys mem | get total) * 100
  },
  disk: (sys disks | select name mount total free | 
         insert percent_used { |it| (($it.total - $it.free) / $it.total * 100) | math round })
}

Exemple 4 : Renommer des fichiers en masse

NU
# Renommer tous les fichiers .webp en .webp
ls *.webp \
  | each { |it| 
      mv $it.name ($it.name | str replace ".webp" ".webp")
    }

Points forts des nouveautés 2026

Les versions 0.110.0 et 0.111.0 de Nushell apportent des améliorations majeures :

1. Commande let dans les pipes

Vous pouvez maintenant définir des variables en plein milieu d'un pipe :

NU
ls 
  | let total = (length)
  | let files = (where type == file | length)
  | echo $"Total: ($total), Files: ($files)"

2. Alias de groupes de commandes

Moins de frappe, plus d'efficacité :

NU
# Définir un groupe d'alias
alias gs = git status
alias ga = git add
alias gc = git commit

# Ou utiliser des groupes de commandes
def "git s" [] { git status }
def "git a" [] { git add }

3. Support amélioré de finally

Garantir que le code de nettoyage s'exécute toujours :

NU
try {
  open data.json | process
} catch { |err|
  echo $"Error: ($err)"
} finally {
  echo "Cleanup complete"
}

4. Intégration du plugin Polars

Des performances boostées pour le traitement de gros volumes de données :

NU
# Utiliser le plugin Polars pour traiter un gros CSV
polars open large_dataset.csv 
  | polars filter (polars col "amount" > 1000)
  | polars group-by "region"
  | polars agg (polars col "amount" | polars agg sum)

Configuration et personnalisation

Emplacement des fichiers de configuration

BASH
# Fichier de configuration
~/.config/nushell/config.nu

# Variables d'environnement
~/.config/nushell/env.nu

# Historique
~/.local/share/nushell/history.txt

Exemple de configuration de base

NU
# config.nu

# Définir l'éditeur
$env.EDITOR = "nvim"

# Prompt personnalisé
def create_prompt [] {
  let path = (pwd | path basename)
  $"[($path)]> "
}

$env.PROMPT_COMMAND = { create_prompt }

# Activer la coloration syntaxique
use ~/.config/nushell/plugins/gghid.nu *

Alias utiles

NU
# À ajouter dans config.nu

alias ll = ls -l
alias la = ls -a
alias lg = ls | grep
alias rm = rm -i  # Suppression sécurisée

# Raccourcis Git
alias gs = git status
alias ga = git add
alias gc = git commit -m
alias gp = git push

Comparaison des performances

Selon les benchmarks de 2026 :

Tâche Bash + outils Nushell
Parsing JSON jq + pipes Natif (3x plus rapide)
Traitement CSV awk/csvkit Natif (2x plus rapide)
Filtrage fichiers find + grep ls + where (équivalent)
Temps de démarrage ~10ms ~50ms
Mémoire ~5 Mo ~15 Mo

Nushell est un peu plus lent au démarrage, mais il excelle dans les tâches complexes de traitement de données car il réduit les appels à des processus externes.

Ressources d'apprentissage

Quand utiliser Nushell ?

✅ Scénarios adaptés

  • Traitement de données structurées JSON, CSV, YAML
  • Construction de pipelines de données et de flux ETL
  • Développement de scripts multi-plateformes
  • Récupération et traitement de données d'APIs
  • Tâches d'administration et de monitoring système

⚠️ Scénarios à aborder avec prudence

  • Migration de scripts Bash existants (nécessite une réécriture)
  • Boucles extrêmement sensibles aux performances (overhead au démarrage)
  • Environnements de production dépendant de comportements shell spécifiques
  • Systèmes profondément intégrés à des chaînes d'outils legacy

Conclusion

Nushell représente la direction future du design des shells. Il ne vise pas à remplacer complètement Bash (les scripts système ont toujours besoin de la compatibilité POSIX), mais il offre un environnement interactif et de scripting bien plus puissant pour les tâches de développement modernes.

Avantages clés :

  1. 🎯 Données structurées d'abord — Fini le mélange de jq, awk et sed
  2. 🔒 Typage sûr — Moins d'erreurs de scripts et de comportements inattendus
  3. 🚀 Cohérence multi-plateforme — Le même script fonctionne partout
  4. 📦 Déploiement en un seul binaire — Aucune dépendance, facile à distribuer
  5. 🛠️ Développement actif — Mises à jour continues en 2026, communauté en pleine croissance

Si vous manipulez régulièrement des APIs, des fichiers de données, ou si vous voulez simplement une expérience de ligne de commande plus moderne, Nushell mérite vraiment le temps que vous investirez à l'apprendre.


Pour commencer : après l'installation, lancez nu pour entrer en mode interactif, ou exécutez nu script.nu pour lancer un script. Le tutoriel officiel est le meilleur point de départ.