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 操作系统
4,689 月下载量
7MB
141K SLoC
Nushell
一种新型的 shell。
目录
状态
该项目已经达到最小可行产品级别的质量。许多人将其作为他们的日常驱动程序,但对于某些命令可能不稳定。随着 Nu 的成熟,其设计可能会发生变化。
了解 Nu
Nushell 书籍 是 Nushell 文档的主要来源。您可以在书中找到 完整的 Nu 命令列表,我们还在我们的 食谱 中提供了许多使用 Nu 的示例。
我们在 Discord 和 Twitter 上也很活跃;来和我们一起聊天吧!
安装
快速安装 Nu
# Linux and macOS
brew install nushell
# Windows
winget install nushell
要在 GitHub Action 中使用 Nu
,请查看 setup-nu 以获取更多详细信息。
详细的安装说明可以在 书籍的安装章节 中找到。Nu 可通过许多软件包管理器获取
有关 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