
NuShell无疑是近年来最耀眼的明星。它不是简单地复制 Bash 或 Zsh 的老路,而是大胆地将 Unix 管道哲学与现代数据处理相结合,用 Rust 语言重塑了一个全新的 Shell 生态。
如果你将不再依赖一堆工具如 awk、grep 或 jq,就能轻松处理 JSON、表格数据,甚至是数据库查询——这就是 NuShell 的魅力。作为一个跨平台工具,它在 Linux、macOS 和 Windows 上都能无缝运行,让开发者、运维工程师和数据爱好者眼前一亮。
官网:https://www.nushell.sh
好消息是,NuShell 的安装超级友好,支持多种方式。最新版本是 0.107.0,于 2025 年 9 月 2 日发布,带来了多项改进,如更好的插件支持和性能优化。 下面是针对主流平台的快速指南:
cargo install nushell,它会从 crates.io 下载并编译最新版。nu 可执行文件移到 /usr/local/bin。sudo apt install nushellsudo dnf install nushellsudo pacman -S nushellbrew install nushell——最简单的方式,几秒钟搞定。winget install nushell,或管理员范围 winget install nushell --scope machine。“安装完成后,直接输入
nu启动交互模式。如果你是初学者,别忘了运行help查看内置帮助。整个过程零门槛,即使是新手也能在 5 分钟内上手。


NuShell 的学习曲线平缓,因为它保留了 Unix 管道的精髓,但加持了智能语法。启动后,你会发现 ls 不再吐出一堆乱码,而是整齐的表格:
D:\dnmp\www\ai\redis-stream> ls
╭────┬───────────────────────┬──────┬─────────┬───────────────╮
│  # │         name          │ type │  size   │   modified    │
├────┼───────────────────────┼──────┼─────────┼───────────────┤
│  0 │ .github               │ dir  │  4.0 kB │ 5 days ago    │
│  1 │ .gitignore            │ file │   598 B │ 5 days ago    │
│  2 │ .idea                 │ dir  │  4.0 kB │ 5 minutes ago │
│  3 │ .last-deploy          │ file │   171 B │ 5 minutes ago │
│  4 │ .phpunit.result.cache │ file │ 18.0 kB │ 3 days ago    │
│  5 │ CLAUDE.md             │ file │ 10.6 kB │ 2 days ago    │
│  6 │ README.md             │ file │ 15.3 kB │ 5 minutes ago │
│  7 │ composer.json         │ file │   683 B │ 5 days ago    │
│  8 │ composer.lock         │ file │ 79.9 kB │ 5 days ago    │
│  9 │ examples              │ dir  │  4.0 kB │ 2 days ago    │
│ 10 │ index.html            │ file │ 84.0 kB │ 5 minutes ago │
│ 11 │ phpunit.xml           │ file │   995 B │ a week ago    │
│ 12 │ src                   │ dir  │  4.0 kB │ 2 days ago    │
│ 13 │ tests                 │ dir  │  4.0 kB │ 3 days ago    │
│ 14 │ vendor                │ dir  │  4.0 kB │ a week ago    │
╰────┴───────────────────────┴──────┴─────────┴───────────────╯
> ls | select name type size | where size > 1KB
╭────┬─────────────────────┬──────┬──────────╮
│  # │        name         │ type │   size   │
├────┼─────────────────────┼──────┼──────────┤
│  0 │ .github             │ dir  │   4.1 KB │
│  1 │ CODE_OF_CONDUCT.md  │ file │   3.4 KB │
│  2 │ CONTRIBUTING.md     │ file │  11.4 KB │
│  3 │ Cargo.lock          │ file │ 168.3 KB │
│  4 │ Cargo.toml          │ file │   9.1 KB │
│  5 │ LICENSE             │ file │   1.1 KB │
│  6 │ README.md           │ file │  12.2 KB │
│  7 │ crates              │ dir  │  12.3 KB │
│  8 │ rust-toolchain.toml │ file │   1.1 KB │
│  9 │ scripts             │ dir  │   4.1 KB │
│ 10 │ src                 │ dir  │   4.1 KB │
│ 11 │ tests               │ dir  │   4.1 KB │
│ 12 │ toolkit.nu          │ file │  17.6 KB │
╰────┴─────────────────────┴──────┴──────────╯
ls | where type == "dir"ls | sort-by size --reversels | sort-by size --reverse | first 3 | get name这些命令输出仍是结构化数据,你可以继续管道:ls | where size > 1mb | get name | str trim | echo
NuShell 支持定义自己的命令,像函数一样强大:
def greet [name: string = "World"] {
    $"Hello, ($name)!"
}
greet  # 输出: Hello, World!
greet Alice  # 输出: Hello, Alice!
这在脚本中特别有用,能让你的工具链更模块化。
创建 myscript.nu 文件:
def main [] {
    let files = ls
    $files | where size > 500kb | get name | each {|it| rm $it }
    print "清理完成!"
}
运行 nu myscript.nu,它会删除所有超过 500KB 的文件。注意,脚本从 main 函数开始执行,支持参数和类型检查。
更多示例,可以参考官方 Cookbook,那里有海量实战案例,从日志分析到 API 调用,应有尽有。