2011-01-14 8 views
1

아래에서 볼 수있는 것처럼 자작 기계를 사용하여 제 컴퓨터에 git를 설치했습니다.간단한 bash 함수가 git를 이해하지 못합니다

$ git --version 
git version 1.7.3.4 

나는 배쉬 프로그래밍을 배우고 난의 기능을 다음과 같은 한 내 ~/.bashrc에

function gitlab { 
    CMD= "git --version" 
    $CMD 
} 

그러나 나는 출력에게 내가 떠들썩한 파티를 사용하고

$ gitlab 
-bash: git --version: command not found 

에 따라 얻을 gitlab을 실행할 때 Mac에서.

+0

[BashFAQ/050] (http://mywiki.wooledge.org/BashFAQ/050)을 참조하십시오. –

답변

3

문제는 CMD= 이후의 공백입니다. 이 값은 CMD=<empty string> "git --version"입니다. 먼저 환경 변수 CMD을 빈 문자열로 설정 한 다음 git --version 명령을 호출합니다. "..." 때문에 쉘은 실제로 git --version 명령을 실행하려고 시도하고 --versiongit이 아닌 명령을 실행하려고합니다. 이 문제를 해결하려면 =" 사이의 공백을 제거하십시오.

+0

+1. 나는 그 공간을 보지 못했습니다. 나는 그 질문을 너무 빨리 읽었다. –

+0

알겠습니다. 그것은 공간이었다. 다른 사람들은 별칭을 사용할 수 있지만이 예제는 더 큰 기능의 스냅 샷입니다. 모두에게 감사드립니다. –

2

전체 문자열을 단일 명령으로 실행하고 있습니다. foo bar (에 공백이있는)이라는 이진 파일을 가질 수 있으며 표시된 것처럼 실행하면됩니다.

편집 : 실제로 무엇을하려고합니까? 위의 함수에서 기대했던대로

gitlab() {git --version} 

alias gitlab='git --version' 

모두

가 동일한 작업을 수행 : 실행하기 전에 변수에 명령을 저장할 필요가 없습니다. 일반적으로 함수 솔루션은 별칭 위에 권장되며 접두어 앞에 function을 붙일 필요가 없습니다.

+0

본 적이 없습니다. 당신은 정교 할 수 있습니까?또한 문제를 해결하기 위해 무엇을 변경해야합니까? –

+0

당신은 반 권리를 가지고 있습니다, 나는 두려워요 .- 실뱅 데프 르네에게 제 의견을 말하십시오. – DarkDust

0

문자열 "git --version"CMD 변수에 할당하려고하면 = 뒤에 불필요한 공백이 있습니다. 쉘은 다음 명령에만 국한되는 CMD 변수에 빈 문자열을 지정한다고 생각합니다. 명령이 "으로 인용되면 쉘은 git --version이라는 프로그램을 실행하려고 시도합니다. 그러한 프로그램이 없기 때문에 실패합니다.

귀하의 기능 (오류가 여기에 쉽게 볼 수있다) 거의 다음과 같은 기능과 같이 해석됩니다

function() { 
    CMD= 
    "git --version" 
    unset -v CMD 
    $CMD 
} 

당신은 당신이 의도 한 것처럼 해석하도록 공백 문자를 제거해야합니다. 그러나 같은 일을 할 수있는 쉬운 방법이 있습니다 :

function gitlab() { 
    git --version 
} 

당신은 CMD 변수에 저장되는 git --version 실행 결과를 저장하기 위해 무엇 당신이 원하는, 당신은이 방법으로 수행해야하는 경우 :

function gitlab() { 
    VERSION="$(git --version)" 
    echo "$VERSION" 
} 

편집 : 내 답장을 올바르지 않게 수정했습니다 (@DarkDust에서 오류가 발견됨).

+0

아닙니다. 그는 명령을 변수'CMD'에 할당하지 * 않습니다. 등호 뒤에 공백이 있는지 확인하십시오. 'CMD = "git --version"; $ CMD'는 잘 평가되지만,'CMD = "git --version"; $ CMD'는 그가하는 일입니다. – DarkDust

+0

네가 맞아! D' oh! 내 대답을 바로 잡을거야. –

관련 문제