Nushell:把结构化数据管道带进跨平台 Shell
给跨平台开发者用的结构化 Shell,把文件和进程数据直接接进管道。
GitHub nushell/nushell 更新 2026-11-07 分支 main 星标 41.0K 分叉 2.3K
Rust 命令行 Shell 结构化数据管道 Windows/macOS/Linux

🧭 决策指南

适合,如果你

  • 你希望在 Windows、macOS、Linux 上用同一套 ls、where、table 管道处理数据。
    Goals 章节写明 Nu 对 Windows、macOS、Linux 提供 first-class support;Pipelines 章节给出 ls | where type == "dir" | table。
  • 你需要把 Cargo.toml 这类 TOML 文件按字段和嵌套路径探索。
    Opening files 章节展示 open Cargo.toml、open Cargo.toml | get package 和 open Cargo.toml | get package.version。
  • 你仍要调用现有平台可执行文件,同时希望用结构化管道处理 ps 等命令输出。
    Goals 章节写明兼容 existing platform-specific executables;Pipelines 章节展示 ps | where cpu > 0。

不适合,如果你

  • 你的关键流程要求所有 Nu 命令都达到稳定生产质量。
    Status 章节称项目处于 minimum-viable-product level,且部分 commands 可能 unstable。
  • 你的团队不能接受 Shell 设计在项目成熟过程中发生变化。
    Status 章节明确写道 Nu's design is subject to change as it matures。
  • 你只需要传统纯文本 Shell 管道,不需要结构化数据或表格输出。
    README Philosophy 和 Pipelines 章节强调 Nu 将数据视为 structured,并提供第三种 structured data stream。

前置条件

  • 操作系统需落在 README 明确支持的 Windows、macOS 或 Linux 范围内;The operating system should be Windows, macOS, or Linux, which README explicitly lists as first-class supported platforms.
  • Linux 和 macOS 可使用 `brew install nushell`,Windows 可使用 `winget install nushell`;Linux and macOS can use `brew install nushell`, while Windows can use `winget install nushell`.
  • 若要查找配置文件位置,Nu 提供 `$nu.config-path`;Nu provides `$nu.config-path` to locate the configuration file.

第一步命令(README 原文)

brew install nushell

要注意

  • 不要把所有命令都视为稳定接口,Status 章节明确保留部分命令不稳定的可能。
    README Status 章节:it may be unstable for some commands。
  • 不要只按 Unix 文本流理解输出,Nu 还会产生 structured data stream。
    README Pipelines 章节将结构化数据列为第三种 stream。
  • 配置文件位置不是固定路径,应使用 `$nu.config-path` 查询。
    README Configuration 章节直接提供 `$nu.config-path`。

替代方案

  • PowerShell:当团队已有 PowerShell 工作流,且不需要切换到 Nu 的新管道语法时。
    README Philosophy 与 Goals 章节

材料未说明

  • README 材料没有给出最新版本 0.116.1 的逐命令稳定性清单;The supplied README material does not provide a per-command stability list for version 0.116.1.
  • README 材料没有给出与 Bash、Zsh 或 PowerShell 的性能和兼容性对比数据;The supplied README material provides no performance or compatibility benchmarks against Bash, Zsh, or PowerShell.
  • Plugins 章节被省略,无法据此判断插件机制、插件生态和插件稳定性;The Plugins chapter is omitted, so the plugin mechanism, ecosystem, and stability cannot be assessed.
  • README 材料没有说明 5 个版本和 10 次最近提交分别对应的发布时间与变更内容;The supplied material does not explain the dates or changes represented by 5 releases and 10 recent commits.

💡 深度解析

6
不适合 我希望把关键自动化流程从现有 Shell 迁移到 Nu,并依赖长期稳定的命令语义;当前项目成熟度是否足够?
适合读者: 需要在日常生产环境中替代部分 Shell、但依赖长期稳定命令和成熟 POSIX 行为的自动化维护者

不适合在未经验证的情况下迁移关键生产流程,因为README明确保留了命令不稳定和设计变化的风险。

  • Status章节只把项目定义为“minimum-viable-product level of quality”,并说许多人将其作为日常Shell使用,但部分命令可能不稳定。
  • 同一章节明确指出Nu的设计会随着成熟而变化,这意味着脚本语义和命令行为存在演进风险。
  • Nu的目标虽包括结构化数据、函数式管道和跨平台支持,但这些设计收益不能推出所有命令都具备生产级稳定承诺。
  • 项目数据只显示最新版本为0.116.1、共有5条发布记录,无法据此证明目标命令、插件或平台能力已经满足关键自动化的稳定性要求。
  • Status:"This project has reached a minimum-viable-product level of quality"
  • Status:"it may be unstable for some commands"
  • Status:"Nu's design is subject to change as it matures"
  • 项目核心数据:latest_release 为 0.116.1;release_count 为 5
材料未说明:关键流程实际依赖哪些命令,以及这些命令在0.116.1中的稳定性;目标平台、插件和外部可执行文件组合是否有持续集成覆盖;README未提供命令级稳定性承诺、弃用周期或版本兼容政策
适合 我经常分别处理目录列表和运行进程,希望用同一套字段过滤逻辑而不是解析文本列;Nu 是否能直接改善这类日常操作?
适合读者: 需要查询目录和运行进程、并希望摆脱 grep、awk、sed 文本解析的系统管理员

适合,因为README直接展示了目录和进程都可进入结构化管道,并使用相同的where思路按字段筛选。

  • ls返回目录中的行记录,每行包含name、type、size、modified等字段;示例用where type == "dir"筛选目录。
  • ps返回进程表,示例按数值字段cpu执行where cpu > 0,说明过滤不是依赖显示列的位置。
  • Nu把命令分成产生流、过滤流和消费输出三类,table负责显示结果,因此同一种管道结构可以覆盖不同系统对象。
  • 这类收益主要出现在Nu内置命令之间;如果数据来自只输出文本的外部程序,仍需处理非结构化输入。
  • Pipelines:"Commands that produce a stream (e.g., `ls`)"、"filter a stream (e.g., `where type == \"dir\"`)"
  • Pipelines:`ls | where type == "dir" | table`
  • Pipelines:`ps | where cpu > 0`
  • 项目洞察 solution_analysis.key_features:`ls`、`ps`输出记录和表格
ls | where type == "dir" | table
材料未说明:目标操作系统上的 `ps` 字段是否完全包含所需的权限、状态和资源信息;大型目录或进程列表上的实际性能,以及字段值为空时的行为;README示例未覆盖权限不足、空结果和嵌套字段等边界情况
不适合 我现有的 Bash/Zsh 脚本大量依赖 grep、awk、sed、列位置和 POSIX 语义;能否直接改用 Nushell 而不进行大规模重写?
适合读者: 长期使用 Bash 或 Zsh、需要维护依赖文本解析和 POSIX 语义的系统管理员

不适合直接替换,因为Nu的内置命令、变量、参数解析和管道数据模型都不同,现有脚本不能假定兼容。

  • README把Nu描述为结构化Shell:ls产生表格记录,where按字段过滤,table消费管道输出;这不是传统文本流的等价实现。
  • Nu虽然可以输出和读取stdout、stdin,也兼容现有平台可执行文件,但这只保留了调用外部程序的能力,并不等于 Bash/Zsh 语法兼容。
  • 项目洞察明确指出,直接迁移现有Shell脚本容易在变量展开、条件表达式、重定向、错误处理、路径和平台命令差异上出错。
  • README还说明项目处于最低可用产品级别,部分命令可能不稳定、设计可能变化,因此不适合未经改写验证就替代关键POSIX脚本。
  • Philosophy/Pipelines:"commands can output structured data";`ls | where type == "dir" | table`
  • Goals:"Nu ensures compatibility with existing platform-specific executables"
  • Status:"it may be unstable for some commands";"Nu's design is subject to change"
  • 项目洞察 user_experience.common_pitfalls:既有Shell脚本不能假设直接兼容
材料未说明:目标 Bash/Zsh 脚本中哪些语法和外部工具已有Nu等价命令;目标脚本是否依赖Nu尚未稳定的命令或未提供兼容层的POSIX行为;README未说明完整的 Bash/Zsh 迁移映射表
适合 我想保留 Nu 的默认配置,只调整自己的交互行为,并需要知道配置文件的实际位置;README 是否提供了足够直接的配置入口?
适合读者: 需要把 Nu 配置纳入个人工作流、并希望在默认配置基础上定制交互环境的 Rust/CLI 工程师

适合,README提供了默认配置来源、定制方向和查询配置路径的直接命令。

  • README说明首次启动时使用的默认配置位于sample_config,这些配置用于运行 Nushell,用户可以在此基础上修改。
  • 项目把配置作为独立能力说明,并明确指出可以通过config.nu定制Shell行为,适合需要统一个人交互设置的CLI用户。
  • 查询当前系统配置文件位置只需执行$nu.config-path,不必先猜测操作系统路径。
  • 但配置行为属于Nu自身语义,不能直接假设 Bash、Zsh 或 PowerShell 的配置写法可复用。
  • Configuration:"The default configurations can be found at `sample_config`"
  • Configuration:"customize this file for their specific needs"
  • Configuration:"To see where `config.nu` is located ... `$nu.config-path`"
  • 项目洞察 user_experience.common_pitfalls:Nu的变量和语义不同于 Bash、Zsh、PowerShell
$nu.config-path
材料未说明:README未列出各平台默认配置文件的具体目录和加载优先级;README未说明配置变更是否需要重启当前Nu会话;README节选未提供 `config.nu` 中可配置选项的完整清单
适合 我在 GitHub Actions 里需要维护 Windows、macOS 和 Linux 三套自动化步骤,并希望直接按字段处理目录和进程数据;Nushell 是否值得采用?
适合读者: 在 GitHub Actions 中维护 Windows、macOS 和 Linux 工作流、希望减少文本解析脚本的 CI 工程师

适合,尤其是CI步骤需要跨平台运行并处理目录、进程等结构化数据时,但外部命令仍需单独验证。

  • README明确把Windows、macOS和Linux作为一等支持平台,目标就是让命令和技术跨平台工作。
  • README为GitHub Actions提供了专门的setup-nu使用路径,说明Nu有面向该自动化环境的安装入口。
  • ls输出目录记录,ps输出包含pid、name、cpu等字段的表格;where可以复用于两类数据,减少按列切割文本的步骤。
  • Nu仍允许调用平台特定可执行文件,因此可以在保留既有CI工具的同时,把适合的处理逻辑改为结构化管道。
  • Installation:"To use `Nu` in GitHub Action, check `setup-nu`"
  • Goals:"first-class support for Windows, macOS, and Linux"
  • Pipelines:`ls`、`where`、`table`示例
  • Pipelines:`ps | where cpu > 0`示例
材料未说明:setup-nu 对目标 GitHub Actions runner 镜像和 Nu 版本的具体支持范围;目标工作流使用的外部命令是否在三类 runner 上具有一致行为;README未提供 GitHub Actions 的完整 YAML 示例或失败处理规范
视情况 我需要让同一套脚本覆盖 Windows、macOS 和 Linux,同时不能放弃现有的平台特定可执行文件;Nushell 是否适合作为统一 Shell?
适合读者: 需要在 Windows、macOS 和 Linux 之间保持一致命令行体验,并同时调用平台特定可执行文件的跨平台工程师

视情况,Nu适合作为跨平台脚本的统一数据处理层,但不能消除外部程序本身的平台差异。

  • README将Windows、macOS和Linux列为“一等支持”平台,并把跨平台列为首要目标。
  • Nu明确保证兼容现有平台特定可执行文件,因此可以逐步保留既有工具,而不是一次性重写全部流程。
  • 但README只说明兼容能力,没有承诺每个外部程序的参数、退出码、路径格式或输出文本在三个平台一致。
  • Nu的内置命令拥有结构化数据,而外部程序常输出文本;跨越这条边界时仍需处理解析和平台差异。
  • Goals:"Nu is cross-platform";"first-class support for Windows, macOS, and Linux"
  • Goals:"Nu ensures compatibility with existing platform-specific executables"
  • Philosophy:"Nu views data as either structured or unstructured"
  • user_experience.common_pitfalls:外部程序、参数和系统返回格式仍可能带来平台差异
brew install nushell
材料未说明:目标脚本依赖的每个外部可执行文件是否同时存在于 Windows、macOS 和 Linux;目标版本对路径、权限、进程管理和错误码的具体兼容范围;README未给出三平台逐命令兼容性矩阵

✨ 核心亮点

  • 用 ls、where 和 table 组成结构化数据管道
  • Windows、macOS、Linux 获得一等跨平台支持
  • open Cargo.toml 可直接探索 TOML 结构
  • MVP 阶段,部分命令仍可能不稳定

🔧 工程化

  • Nu 将 ls 输出为表格,并用 where 过滤字段
  • open Cargo.toml 可读取 TOML 的嵌套结构
  • 兼容现有平台可执行文件,支持 stdout 与 stdin

⚠️ 风险

  • Status 明确称部分命令可能不稳定,不能默认替代全部 Shell
  • Status 表示 Nu 设计仍会随成熟度变化
  • 项目仅达到 MVP 质量,贡献者数量为 10 人

👥 适合谁?

  • 需要跨 Windows、macOS、Linux 使用同类命令的开发者
  • 处理 TOML 等结构化文件、偏好管道组合的 CLI 用户
  • 使用 zoxide、starship 或 atuin 的 Nu 用户