2014-02-19 4 views
2

예상, 내 별명에 다음과 같은 별칭이 파일을했다 :에코 하나 오랫동안

ignore=!([ ! -e .gitignore ] && touch .gitignore) | echo $1 >>.gitignore 

그것은 나에게 원래하지, 그리고 만약 당신이 그것을 검색, 당신은 그것을 많이 볼 수 있습니다 장소. 그러나 최근에는 별칭에 이상한 문제가 발생하기 시작했습니다. 무시한 내용은 .gitignore 파일과 같은 줄에 두 번 넣습니다 (공백 만 사용).

나는 약간의 디버깅을 수행하여 실제로 일어나는 일은 echo $1에 대한 호출이 예상대로 $1으로 나타나지만 별칭에 대한 전체 인수 문자열을 반향한다는 것을 알았습니다. 그것은 분명 $1 인 반면 에코 전화가에 압정으로 고정 인수의 전체 세트를지고 있음을 보여주기 때문에 마지막 줄이 가장 재미있다

eo = !echo $1 

> git eo test 
test test  

> git eo test0 test1 
test0 test0 test1 

그건 :

이를 테스트하기 위해, 나는 새로운 별칭을 만든 올바르게 평가되고 있습니다. 사실, 것들로 내가 엉망 및 $9$1 변경 (및 $9를 기입하지 않는) 경우, 내가 얻을 :이 망할 놈의 버전에서 발생하는 것으로 확인되었습니다

> git eo test0 test1 
test0 test1 

1.9.0 및 I에 1.8.5 Git 버전 1.7.1에서는 발생하지 않는다고 확인했다. 불행히도, 나는 1.7.1과 1.8.5 사이에서 테스트 할 수 없습니다.

여기에 무슨 일이 벌어지고 있는지에 대한 통찰력이있는 사람이 있습니까? 내 별칭 몇 개가 깨져서 ...

답변

3

확장이 예상 한 것과 다르다고 생각합니다. 의이 별명 시작하자 : 다음 확장

echo $1 test 

가 :

은 전형적인 방식 자식 별칭에 보이는
echo test test 

은 내가 git eo test 믿을

eo = !echo $1 

로 확대되고있다 내가 "eo"라고 말할 때, "echo $ 1"을 실행하고 그 명령에 모든 인수를 전달하기를 바란다. 이렇게하면

[alias] 
k = !gitk 

과 같은 일을 할 수 있으며 여전히 git k에 인수를 전달할 수 있습니다. 이것을 다르게 동작 시키려면 다음과 같이 쉘 호출을 통해 전달해야합니다.

[alias] 
eo = !sh -c 'echo $1' - 

그러면 예상되는 결과를 얻게됩니다. 나는 당신의 무시 별칭에 대한 생각

, 당신은

[alias] 
ignore = !sh -c 'echo "$1" >> .gitignore' - 

주 뭔가를 원하는 : 당신이 작업하는 >>의 파일을 터치 할 필요가 없습니다, 그리고 원래 별명에 당신은 아마 대신 ;를 사용하는 의미 터치 출력을 에코로 파이프하는 것.

+0

'ignore =! >>. gitignore echo'도 아마 작동 할 것입니다 (그리고 당신이 ignore 파일에 한번에 여러 파일을 추가 할 수있게 해줍니다) – knittl