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 ?
# 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
# 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)
# 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
# Homebrew
brew install nushell
# MacPorts
sudo port install nushell
Windows
# Winget (Windows 10/11)
winget install nushell
# Chocolatey
choco install nushell
# Scoop
scoop install nushell
Vérifier l'installation
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 :
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 :
# 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 :
# 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 :
# Flux de texte, chaque commande doit parser le texte
ls -l | grep ".md" | awk '{print $9}'
Dans Nushell :
# 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
# 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 :
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
# 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
# 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
# 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 :
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é :
# 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 :
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 :
# 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
# 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
# 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
# À 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
- Documentation officielle — Guide complet et référence
- Nushell sur GitHub — Code source et suivi des issues
- Blog Nushell — Sorties de versions et mises à jour fonctionnelles
- Communauté Discord — Support communautaire actif
- Cookbook d'exemples — Snippets de code pratiques
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 :
- 🎯 Données structurées d'abord — Fini le mélange de
jq,awketsed - 🔒 Typage sûr — Moins d'erreurs de scripts et de comportements inattendus
- 🚀 Cohérence multi-plateforme — Le même script fonctionne partout
- 📦 Déploiement en un seul binaire — Aucune dépendance, facile à distribuer
- 🛠️ 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.