Retour aux mises à jour
New releaseAug 30, 2026

nushell v0.115.0

Un nouveau type de shell

Partager

Nushell

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

Un nouveau type de shell.

Exemple de nushell

Table des matières

Statut

Ce projet a atteint un niveau de qualité de produit minimal viable. Beaucoup de personnes l'utilisent comme shell quotidien, mais il peut être instable pour certaines commandes. La conception de Nu est susceptible de changer à mesure qu'il mûrit.

Apprendre Nu

Le livre Nushell est la principale source de documentation de Nushell. Vous pouvez trouver une liste complète des commandes Nu dans le livre, et nous avons de nombreux exemples d'utilisation de Nu dans notre livre de recettes.

Nous sommes également actifs sur Discord ; venez discuter avec nous !

Installation

Pour installer Nu rapidement :

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

Pour utiliser Nu dans GitHub Action, consultez setup-nu pour plus de détails.

Des instructions d'installation détaillées se trouvent dans le chapitre d'installation du livre. Nu est disponible via de nombreux gestionnaires de paquets :

Packaging status

Pour plus de détails sur les plateformes que l'équipe Nushell prend activement en charge, consultez notre politique de support des plateformes.

Configuration

Les configurations par défaut se trouvent dans sample_config qui sont les fichiers de configuration que l'on obtient au premier démarrage de Nushell.

Cela configure toutes les valeurs par défaut pour faire fonctionner Nushell. À partir de là, on peut ensuite personnaliser ce fichier selon ses besoins spécifiques.

Pour voir où se trouve config.nu sur votre système, tapez simplement cette commande.

$nu.config-path

Veuillez consulter notre livre pour toute la documentation de Nushell.

Philosophie

Nu s'inspire de projets comme PowerShell, des langages de programmation fonctionnels et des outils CLI modernes. Plutôt que de considérer les fichiers et les données comme des flux bruts de texte, Nu considère chaque entrée comme quelque chose de structuré. Par exemple, lorsque vous listez le contenu d'un répertoire, vous obtenez un tableau de lignes, où chaque ligne représente un élément de ce répertoire. Ces valeurs peuvent être transmises à travers une série d'étapes, dans une série de commandes appelée « pipeline ».

Pipelines

Sous Unix, il est courant d'utiliser des pipes entre les commandes pour décomposer une commande sophistiquée en plusieurs étapes. Nu va plus loin et s'appuie fortement sur l'idée de pipelines. Comme dans la philosophie Unix, Nu permet aux commandes d'écrire sur stdout et de lire depuis stdin. De plus, les commandes peuvent produire des données structurées (vous pouvez considérer cela comme un troisième type de flux). Les commandes qui fonctionnent dans le pipeline se répartissent en trois catégories :

  • Les commandes qui produisent un flux (par exemple, ls)
  • Les commandes qui filtrent un flux (par exemple, where type == "dir")
  • Les commandes qui consomment la sortie du pipeline (par exemple, table)

Les commandes sont séparées par le symbole pipe (|) pour indiquer un pipeline qui s'écoule de gauche à droite.

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

Comme la plupart du temps vous voudrez voir la sortie d'un pipeline, table est supposé. Nous aurions aussi pu écrire ce qui précède :

ls | where type == "dir"

Pouvoir utiliser les mêmes commandes et les composer différemment est une philosophie importante dans Nu. Par exemple, nous pourrions utiliser la commande intégrée ps pour obtenir la liste des processus en cours d'exécution, en utilisant le même where que ci-dessus.

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

Ouvrir des fichiers

Nu peut charger le contenu de fichiers et d'URLs comme texte brut ou comme données structurées (s'il reconnaît le format). Par exemple, vous pouvez charger un fichier .toml comme données structurées et l'explorer :

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

Nous pouvons transmettre cela à une commande qui récupère le contenu d'une des colonnes :

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

Et si nécessaire, nous pouvons approfondir davantage :

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

Plugins

Nu prend en charge les plugins qui offrent des fonctionnalités supplémentaires au shell et qui suivent le même modèle de données structurées que les commandes intégrées. Il y a quelques exemples dans les répertoires crates/nu_plugins_*.

Les plugins sont des binaires disponibles dans votre PATH et suivent une convention de nommage nu_plugin_*. Ces binaires interagissent avec nu via un simple protocole JSON-RPC où la commande s'identifie et transmet sa configuration, la rendant ainsi disponible à l'utilisation. Si le plugin est un filtre, les données lui parviennent un élément à la fois, et il peut renvoyer des données en continu via stdin/stdout. Si le plugin est un puits (sink), il reçoit le vecteur complet des données finales et dispose d'une liberté totale sur stdin/stdout pour les utiliser comme bon lui semble.

Le dépôt awesome-nu répertorie une variété de plugins nu, tandis que le dépôt showcase présente des articles de blog informatifs écrits sur Nushell ainsi que des vidéos qui mettent en lumière des sujets techniques qui ont été présentés.

Objectifs

Nu adhère étroitement à un ensemble d'objectifs qui constituent sa philosophie de conception. À mesure que des fonctionnalités sont ajoutées, elles sont vérifiées par rapport à ces objectifs.

  • Avant tout, Nu est multiplateforme. Les commandes et les techniques doivent fonctionner sur toutes les plateformes et Nu offre un support de première classe pour Windows, macOS et Linux.

  • Nu garantit la compatibilité avec les exécutables existants spécifiques à chaque plateforme.

  • Le flux de travail et les outils de Nu doivent offrir la convivialité attendue d'un logiciel moderne en 2022 (et au-delà).

  • Nu considère les données comme structurées ou non structurées. C'est un shell structuré comme PowerShell.

  • Enfin, Nu considère les données de manière fonctionnelle. Plutôt que d'utiliser la mutation, les pipelines servent de moyen de charger, modifier et enregistrer des données sans état mutable.

Officiellement pris en charge par

Veuillez soumettre un problème (issue) ou une PR pour être ajouté à cette liste.

Contribuer

Voir Contribuer pour plus de détails. Merci à toutes les personnes qui ont déjà contribué !

Licence

Le projet est mis à disposition sous la licence MIT. Voir le fichier LICENSE pour plus d'informations.

Catégories