Nushell
安装 Nu !
快速开始
  • Nushell 之书
  • 命令参考列表
  • 实战指南
  • 语言参考指南
  • 贡献指南
博客
  • English
  • 中文
  • Deutsch
  • Français
  • Español
  • 日本語
  • Português do Brasil
  • Русский язык
GitHub
安装 Nu !
快速开始
  • Nushell 之书
  • 命令参考列表
  • 实战指南
  • 语言参考指南
  • 贡献指南
博客
  • English
  • 中文
  • Deutsch
  • Français
  • Español
  • 日本語
  • Português do Brasil
  • Русский язык
GitHub
  • 简介
  • 安装
    • 默认 Shell
  • 快速入门
    • 快速入门
    • 在系统中四处移动
    • 用 Nu 的方式思考
    • Nushell 速查表
  • Nu 基础篇
    • 数据类型
    • 加载数据
    • 管道
    • 处理字符串
    • 处理列表
    • 处理记录(Records)
    • 处理表格
    • 导航和访问结构化数据
    • 特殊变量
  • Nushell 编程
    • 自定义命令
    • 别名
    • 运算符
    • 变量
    • 控制流
    • 脚本
    • 模块
      • 使用模块
      • 创建模块
    • 覆层
    • 排序
    • 测试你的 Nushell 代码
    • 最佳实践
  • Nu 作为 Shell 使用
    • 配置
    • 环境
    • 标准输入、输出和退出码
    • 运行系统(外部)命令
    • 如何配置第三方提示
    • 目录栈
    • Reedline,Nu 的行编辑器
    • 自定义补全
    • 外部命令
    • Nu 的配色和主题
    • 钩子
    • 后台任务
  • 迁移到 Nu
    • 从 Bash 到 Nu
    • 从 CMD.EXE 到 Nu
    • 从其他 Shell 或 DSL 到 Nu
    • 从命令式语言到 Nu
    • 从函数式语言到 Nu
    • Nushell 运算符
  • 设计说明
    • Nushell代码执行原理
  • (不怎么)高级篇
    • 标准库 (预览版)
    • Dataframes
    • 元数据
    • 创建你自己的错误
    • 并行
    • 插件
    • explore

外部命令

使用外部命令(又名二进制文件或应用程序)是任何 shell 的一个基本功能。Nushell 允许自定义命令利用其许多功能,例如:

  • 解析时类型检查
  • 自动补全
  • 语法高亮

对这些功能的支持是使用 extern 关键字提供的,它允许为外部命令定义一个完整的签名。

下面是 ssh 命令的一个简短例子:

module "ssh extern" {
  def complete_none [] { [] }

  def complete_ssh_identity [] {
    ls ~/.ssh/id_*
    | where {|f|
        ($f.name | path parse | get extension) != "pub"
      }
    | get name
  }

  export extern ssh [
    destination?: string@complete_none  # 目标主机
    -p: int                             # 目标端口
    -i: string@complete_ssh_identity    # 身份文件
  ]
}
use "ssh extern" ssh

你会注意到这里的语法与定义自定义命令时的 def 关键字的语法相似。你可以描述标志、位置参数、类型、补全器等等。

这个实现:

  • 将提供 -p 和 -i(带描述)作为 ssh - 的可能补全。

  • 将执行解析时类型检查。试图为端口号使用非 int 将导致错误(和错误条件的语法高亮)。

  • 将根据参数的形状提供解析时语法高亮。

  • 将提供 ~/.ssh 中的任何私钥文件作为 -i(身份)选项的补全值。

  • 将不为目标主机提供补全。如果没有返回空列表的补全器,Nushell 将尝试使用默认的“文件”补全器。

    有关从 SSH 配置文件中检索主机的实现,请参阅 Nu_scripts 仓库。

提示

用于参数文档目的的 Nushell 注释,如果与参数在同一行,则需要在 # 井号之前加一个空格。

格式说明符

位置参数可以用 ? 设为可选(如上所示)。剩余的(rest)参数可以在参数名称前用 ... 来匹配。例如:

export extern "git add" [
  ...pathspecs: path
  # …
]

局限性

目前的extern语法有一些限制。在 Nushell 中,标志和位置参数是非常灵活的:标志可以在位置参数之前, 也可以与位置参数混合, 还可以跟随位置参数。许多外部命令没有这种灵活性。目前还没有一种方法来确保标志和位置参数的特定顺序与外部命令所要求的风格保持一致。

第二个限制是,有些外部命令要求使用=来传递标志和值。在 Nushell 中,=是一种方便的可选默认参数语法,目前还没有办法按要求使用它。

此外,通过脱字符号(例如 ^ssh)调用的外部命令不会被 extern 识别。

最后,一些外部命令支持使用单个前导连字符的 -long 参数。Nushell extern 语法尚不能表示这些参数。

在GitHub上编辑此页面
Contributors: Justin Ma, voyage200🍬
Prev
自定义补全
Next
Nu 的配色和主题