web-dev-qa-db-ja.com

Bashエイリアス内のif-then-else

私はmvのエイリアスを作成しようとしています。そのため、通常のフォルダーで通常の動作を行い、gitリポジトリ内で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)"'
6
switch87

そのための関数を使用します。

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

8
jhscheer

Jhscheerがはるかに優れたソリューション(IMHO)を提案しましたが、エイリアスのみで実行しようとしていたことを達成することは依然として可能です。

git mvを単一のトークンにする外部二重引用符が原因でエイリアスが機能せず、git mv実行可能ファイルがありません。外部の二重引用符を削除すると、エイリアスは正常に機能します。

ところで、echo "git mv"の内側の二重引用符は役に立ちませんが、害はありません。

すぐにテストできるgitリポジトリはありませんが、次のエイリアスで試してみました。

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