Zsh 无法识别函数内的别名

标签 zsh zshrc

这是我的 .zshrc :

alias inst="adb install -r -d"

notify() {
  start=$(date +%s)
  "$@"
  notify-send "\"$(echo $@)\" took $(($(date +%s) - start)) seconds to finish"
}

当我运行命令时 notify inst app.apk ,我收到一个错误:
notify:2: command not found: inst
  0.00s user 0.00s system 0% cpu 0.001 total

任何人都可以解释为什么这不起作用,并希望有一种使它起作用的方法?

最佳答案

当 shell 处理命令时,除其他外(例如 PATH 搜索),它会检查 是否存在。第一 标记/参数(空格分隔)属于当前环境中加载的别名。如果您尝试替换的别名不是第一个标记,则替换不会发生。如果您的别名恰好不是 PATH 上的可执行文件的名称或当前目录,错误将传播回 command not found .

由于您的问题是关于 Z Shell,zsh实际上提供了一个鲜为人知的功能,称为全局别名。如果使用 -g 声明别名旗帜,zsh不仅会适当替换第一个标记,还会替换 任何 token ,不分顺序。
alias -g inst="adb install -r -d"应该做的伎俩。

请记住,这是一个 zsh仅出于可移植性原因才具有功能,并确保您编写的任何脚本都有一个调用 zsh 的shebang 行。 shell :#!/usr/bin/env zsh
我还建议不要使用 zsh重要或生产脚本中的全局别名。对于个人使用,它完全没问题。

关于Zsh 无法识别函数内的别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45601589/

相关文章:

ruby - 如何从 ruby​​ 脚本访问自动加载的 zsh 函数?

linux - 停用 :unset:1: no such hash table element: pydoc

zsh - 如何将函数/变量保持在我的 zshrc 本地?

shell - Linux 上 find 命令的并行版本

linux - 使用 zshrc 别名 sudo - 获取 "aliased to nocorrect sudo"

git - 如何在 zsh 中只显示当前文件夹和 git branch 和 ~ 用于 home

zsh - 列出通过 bindkey 进行的当前现有或应用的键绑定(bind)

zsh - 是否可以在 zsh 中绑定(bind)键 Shift+Enter?

git - Zsh 动态扩展到当前 git 根目录

bash - 您是否需要在 bash profile/zshrc 中包含环境变量的导出?