81 个重大版本发布

0.97.1 2024 年 8 月 21 日
0.96.1 2024 年 7 月 29 日
0.91.0 2024 年 3 月 5 日
0.88.1 2023 年 12 月 14 日
0.1.2 2019 年 7 月 16 日

#16 in 操作系统

Download history 953/week @ 2024-05-04 1485/week @ 2024-05-11 928/week @ 2024-05-18 2169/week @ 2024-05-25 2498/week @ 2024-06-01 1316/week @ 2024-06-08 748/week @ 2024-06-15 1282/week @ 2024-06-22 1061/week @ 2024-06-29 1407/week @ 2024-07-06 615/week @ 2024-07-13 1443/week @ 2024-07-20 1572/week @ 2024-07-27 905/week @ 2024-08-03 842/week @ 2024-08-10 1161/week @ 2024-08-17

4,689 月下载量

MIT 以及可能 CC-PDDC

7MB
141K SLoC

Nushell

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

一种新型的 shell。

Example of nushell

目录

状态

该项目已经达到最小可行产品级别的质量。许多人将其作为他们的日常驱动程序,但对于某些命令可能不稳定。随着 Nu 的成熟,其设计可能会发生变化。

了解 Nu

Nushell 书籍 是 Nushell 文档的主要来源。您可以在书中找到 完整的 Nu 命令列表,我们还在我们的 食谱 中提供了许多使用 Nu 的示例。

我们在 DiscordTwitter 上也很活跃;来和我们一起聊天吧!

安装

快速安装 Nu

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

要在 GitHub Action 中使用 Nu,请查看 setup-nu 以获取更多详细信息。

详细的安装说明可以在 书籍的安装章节 中找到。Nu 可通过许多软件包管理器获取

Packaging status

有关 Nushell 团队积极支持的平台的详细信息,请参阅 我们的平台支持策略

配置

默认配置可以在 sample_config 中找到,这是启动 Nushell 首次得到的配置文件。

它设置了所有默认配置以运行 Nushell。从这里,可以根据具体需求自定义此文件。

要查看系统上的 config.nu 的位置,只需输入此命令。

$nu.config-path

请参阅我们的手册获取所有Nushell文档。

哲学

Nu从PowerShell、函数式编程语言和现代CLI工具等项目中汲取灵感。Nu不同于将文件和数据视为原始文本流,而是将每个输入视为具有结构的东西。例如,当您列出目录内容时,您会得到一个行表,其中每一行代表目录中的项目。这些值可以通过一系列步骤,在一系列称为“管道”的命令中传输。

管道

在Unix中,将命令连接起来进行管道操作以分步骤执行复杂命令是很常见的。Nu在此基础上更进一步,并大量借鉴了“管道”这一概念。正如Unix哲学一样,Nu允许命令将输出输出到stdout并从stdin读取。此外,命令还可以输出结构化数据(您可以将此视为第三种流)。在管道中运行的命令可以分为三类

  • 生成流的命令(例如,ls
  • 过滤流的命令(例如,where type == "dir"
  • 消费管道输出的命令(例如,table

命令之间通过管道符号(|)分隔,表示从左到右的管道流向。

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

由于您通常需要查看管道的输出,table被视为默认。我们也可以这样写上述内容

> ls | where type == "dir"

能够使用相同的命令并以不同的方式组合它们是Nu的一个重要理念。例如,我们可以使用内置的ps命令来获取正在运行的进程列表,使用与上面相同的where

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

打开文件

Nu可以将文件和URL内容加载为原始文本或结构化数据(如果它识别该格式)。例如,您可以将.toml文件加载为结构化数据并探索它

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

然后我们可以将其传递到获取某一列内容的命令中

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

如果需要,我们还可以进一步深入

> open Cargo.toml | get package.version
0.72.0

插件

Nu支持插件,这些插件为shell提供额外的功能,并遵循与内置命令相同的结构化数据模型。在crates/nu_plugins_*目录中有一些示例。

插件是位于您的路径中的二进制文件,并遵循nu_plugin_*命名约定。这些二进制文件通过简单的JSON-RPC协议与nu交互,其中命令标识自己并传递其配置,使其可用于使用。如果插件是过滤器,数据逐个元素流到它,并且它可以通过stdin/stdout返回数据。如果插件是汇流,它将获得最终数据的全向量,并可以自由使用stdin/stdout。

awesome-nu仓库列出了各种nu插件,而showcase仓库 展示了有关Nushell的信息性博客文章以及强调技术主题的演示视频。

目标

Nu严格遵循一组目标,这些目标构成了其设计理念。添加功能时,它们将与之对照。

  • 首先,Nu是跨平台的。命令和技术应该在不同平台上工作,并且Nu对Windows、macOS和Linux有一级支持

  • Nu确保与现有平台特定可执行文件兼容。

  • Nu的工作流程和工具应具备2022年(以及以后)现代软件所期望的可用性。

  • Nu将数据视为结构化或非结构化。它类似于PowerShell的结构化外壳。

  • 最后,Nu从功能上看待数据。而不是使用变异,管道充当一种无需可变状态来加载、更改和保存数据的手段。

官方支持

请提交问题或PR以添加到此列表。

贡献

有关详细信息,请参阅贡献指南。感谢所有已经做出贡献的人!

许可

本项目以MIT许可证提供。有关更多信息,请参阅LICENSE文件。

依赖项

~73–110MB
~2M SLoC