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

别名

Nushell 中的别名提供了一种简单的命令调用替换方式(包括外部和内部命令)。这允许你为一个较长的命令(包括其默认参数)创建一个简写名称。

例如,让我们创建一个名为 ll 的别名,它将展开为 ls -l。

alias ll = ls -l

我们可以通过别名来调用它:

ll

一旦我们这样做了,就如同我们输入了 ls -l 一样。这也允许我们传入标志或位置参数。例如,我们现在也可以这样写:

ll -a

可得到与输入了ls -l -a一样的结果。

列出所有已加载的别名

你可以在 scope aliases 和 help aliases 中看到所有可用的别名。

持久化

为了使你的别名持久化,它必须被添加到你的 config.nu 文件中。通过运行 config nu 打开编辑器并插入它们,然后重新启动 nushell。 例如,对于上面的 ll 别名,你可以在 config.nu 的任何地方添加 alias ll = ls -l。

$env.config = {
    # 主要配置
}

alias ll = ls -l

# 其他一些配置和脚本加载

在别名中使用管道

请注意,alias uuidgen = uuidgen | tr A-F a-f(使 mac 上的 uuidgen 行为与 linux 一致)将无法工作。 解决方案是定义一个不带参数的命令,通过 ^ 调用系统程序 uuidgen。

def uuidgen [] { ^uuidgen | tr A-F a-f }

更多信息请参阅本书的自定义命令部分。

或者一个更符合 nushell 风格的内部命令示例:

def lsg [] { ls | sort-by type name -i | grid -c | str trim }

在网格中显示所有列出的文件和文件夹。

使用别名替换现有命令

警告!

替换命令时,最好先“备份”命令,以避免递归错误。

如何备份像 ls 这样的命令:

alias core-ls = ls    # 这将为 ls 创建一个名为 core-ls 的新别名

现在你可以在你的 nu 编程中使用 core-ls 作为 ls。你将在下面看到如何使用 core-ls。

你需要使用别名的原因是,与 def 不同,别名是位置相关的。因此,在重新定义旧命令之前,你需要先用别名“备份”它。 如果你不备份命令,而是使用 def 替换命令,你将会得到一个递归错误。

def ls [] { ls }; ls    # *不要*这样做!这会抛出递归错误

#输出:
#Error: nu::shell::recursion_limit_reached
#
#  × Recursion limit (50) reached
#     ╭─[C:\Users\zolodev\AppData\Roaming\nushell\config.nu:807:1]
# 807 │
# 808 │ def ls [] { ls }; ls
#     ·           ───┬──
#     ·              ╰── This called itself too many times
#     ╰────

推荐的替换现有命令的方法是遮蔽(shadow)该命令。 这是一个遮蔽 ls 命令的例子。

# 将内置的 ls 命令别名为 ls-builtins
alias ls-builtin = ls

# 列出目录中项目的的文件名、大小和修改时间。
def ls [
    --all (-a),         # 显示隐藏文件
    --long (-l),        # 获取每个条目的所有可用列(较慢;列取决于平台)
    --short-names (-s), # 只打印文件名,不打印路径
    --full-paths (-f),  # 将路径显示为绝对路径
    --du (-d),          # 显示目录的视在大小(“磁盘使用情况”)而不是目录元数据大小
    --directory (-D),   # 列出指定的目录本身而不是其内容
    --mime-type (-m),   # 在类型列中显示 mime-type 而不是 'file'(仅基于文件名;不检查文件内容)
    --threads (-t),     # 使用多个线程列出内容。输出将是不确定的。
    ...pattern: glob,   # 要使用的 glob 模式。
]: [ nothing -> table ] {
    let pattern = if ($pattern | is-empty) { [ '.' ] } else { $pattern }
    (ls-builtin
        --all=$all
        --long=$long
        --short-names=$short_names
        --full-paths=$full_paths
        --du=$du
        --directory=$directory
        --mime-type=$mime_type
        --threads=$threads
        ...$pattern
    ) | sort-by type name -i
}
在GitHub上编辑此页面
Contributors: Justin Ma, 0x4D5352, Jan Klass, voyage200🍬
Prev
自定义命令
Next
运算符