这不能(或实际上不应该)使用别名.别名在执行之前只是被它们的值替换,因此不提供任何控制结构.
如果您需要更多控制,功能更适合:
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)
这创建了两个函数 - rm
和mv
- 具有相同的主体.根据在工作树内的内容,可以git
使用used命令name($0
)调用,也可以调用命令本身.
使用command
(显式调用外部命令$PATH
而不是函数或别名)或使用完整路径(/bin/$0
)调用可执行文件非常重要,否则函数将以递归方式调用.