我想将mv / rm别名为'git mv'/'git rm',如果当前路径是git工作副本。否则mv / rm只是正常的mv / rm。
zsh可以存档吗?
答案 0 :(得分:5)
这不能(或实际上不应该)使用别名。别名在执行之前只是被它们的值替换,因此不提供任何控制结构。
如果您需要更多控制,功能更适合:
function rm mv () {
if git rev-parse --is-inside-work-tree &> /dev/null
then
git $0 "$@"
else
command $0 "$@"
fi
}
这会创建两个函数 - rm
和mv
- 具有相同的正文。根据工作树内部,使用使用的命令名称git
调用$0
或调用命令本身。
使用command
(显式调用$PATH
的外部命令而不是函数或别名)或使用完整路径(/bin/$0
)调用可执行文件非常重要,否则该函数将被递归调用。