如何在zsh中做条件别名?

Mag*_*oud 0 zsh

我想将mv/rm别名为'git mv'/'git rm',如果当前路径是一个git工作副本.否则mv/rm只是正常的mv/rm.

可以zsh存档吗?

Ada*_*hon 5

这不能(或实际上不应该)使用别名.别名在执行之前只是被它们的值替换,因此不提供任何控制结构.

如果您需要更多控制,功能更适合:

function rm mv () {
    if git rev-parse --is-inside-work-tree &> /dev/null
    then
        git $0 "$@"
    else
        command $0 "$@"
    fi
}
Run Code Online (Sandbox Code Playgroud)

这创建了两个函数 - rmmv- 具有相同的主体.根据在工作树内的内容,可以git使用used命令name($0)调用,也可以调用命令本身.

使用command(显式调用外部命令$PATH而不是函数或别名)或使用完整路径(/bin/$0)调用可执行文件非常重要,否则函数将以递归方式调用.