这是我的 .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/