Bash 별칭의 if-then-else

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)"'

답변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가 더 나은 솔루션(IMHO)을 제안했지만 별칭만 사용하여 원하는 작업을 수행하는 것도 여전히 가능합니다.

외부 큰따옴표가 단일 태그를 형성하고 실행 파일이 git mv없기 때문에 별칭이 작동하지 않습니다. git mv외부 큰따옴표를 제거하면 별칭이 제대로 작동합니다.

그런데 안쪽의 큰따옴표는 echo "git mv"쓸모는 없지만 해가 없습니다.

테스트에 즉시 사용할 수 있는 git 저장소가 없지만 다음 별칭을 사용해 보았습니다.

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

관련 정보