如何在zsh中做条件别名?

时间:2014-03-26 06:50:24

标签: zsh

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

zsh可以存档吗?

1 个答案:

答案 0 :(得分:5)

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

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

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

这会创建两个函数 - rmmv - 具有相同的正文。根据工作树内部,使用使用的命令名称git调用$0或调用命令本身。

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