Bash Alias 中的 if-then-else

Bash Alias 中的 if-then-else

我正在尝试为其创建一个别名,以便它在正常文件夹中执行正常行为,并被git 存储库内部mv替换。git mv我尝试了很多方法。该if语句有效,只是命令git mv无法正确运行。

alias mv='"$(
if [ x`git rev-parse --show-toplevel 2> /dev/null` = x ]; 
    echo mv;  
else 
    echo "git mv"; 
fi)"'

答案1

我会为此使用一个函数,如下所示:

gitmv()
{
    # If in a git repo - call git mv. otherwise- call mv
    if [ x`git rev-parse --show-toplevel 2> /dev/null` = x ]; 
    then
        mv "$@"  
    else 
        git mv "$@" 
    fi
}

编辑:

alias mv=gitmv

答案2

尽管 jhscheer 提出了一个更好的解决方案(恕我直言),但仍然可以仅使用别名来实现您想要做的事情。

您的别名不起作用,因为外部双引号构成了git mv单个标记,并且您没有git mv可执行文件。如果删除外部双引号,您的别名应该可以正常工作。

顺便说一句,内部双引号 inecho "git mv"没有用,但无害。

我没有立即可用于测试的 git 存储库,但我只是尝试使用以下别名:

alias foo='$(if [ x"`pwd`" = x"$HOME" ] ; then echo echo; else echo echo foo; fi)'

相关内容