2014-10-10 15 views
2

cygwin에서 zsh 및 prezto를 사용 중입니다. 이 자식 명령 'git reset HEAD5'를 입력하면 zsh에 HEAD ^가 없습니다. 하지만 bash를 사용하도록 전환하면 작동합니다.zsh가 HEAD를 인식하지 못함^

$ git reset HEAD^           
zsh: no matches found: HEAD^ 

누구든지 동일한 문제가 있습니까?

답변

5

^ 문자 zsh을에 파일 이름 확장 특수로 취급되지만 EXTENDED_GLOB 옵션이 설정되어있는 경우에만 :

zsh% setopt noEXTENDED_GLOB 
zsh% echo HEAD^ 
HEAD^ 
zsh% setopt EXTENDED_GLOB 
zsh% echo HEAD^ 
zsh: no matches found: HEAD^ 
zsh% 

배쉬이 기능이 없습니다. (정확히 말하면, 배쉬는 shopt -s extglob으로 활성화 확장 글로브의 기능을 가지고 있지만, 배쉬의 확장 글로브 구문은 특별한으로 ^ 문자를 취급하지 않습니다.)

가능이 기능

^* 유사한 특수 문자 그러나 다른 의미와 함께. *처럼, 작은 따옴표 나 큰 따옴표로 묶거나 백 슬래시를 앞에 붙여 이스케이프 처리하여 특별한 의미를 금지 할 수 있습니다. 인용은 가장 간단한 해결책입니다.

오히려

git reset HEAD^ 

보다 것은이 시도 :

git reset 'HEAD^' 

당신이 할 필요가 그것을 사용하지 않는,하지만 난 그것을 언급거야 이후 ^ 와일드 카드의 의미는 관련이 없습니다 어쨌든. zsh 설명서에 따르면 은 (을 제외하고는 X 제외)과 일치합니다. HEAD^의 경우는 ^ 다음에 아무 것도 표시되지 않습니다. 즉, HEAD^HEAD과 일치하며 그 뒤에 아무것도 표시되지 않습니다. 이는 HEAD^HEAD으로 시작하고 일부 비어 있지 않은 문자열이 뒤에 오는 파일 이름과 일치한다는 것을 말합니다. 파일이 HEAD, HEAD1HEAD2 인 경우 HEAD^ 패턴은 HEAD1HEAD2과 일치합니다.

3

issue 449 of oh-my-zsh는이 정확한 동작을 설명하고 해결책을 제시합니다.

범인은 zsh의 옵션 extended_glob입니다. Presto가 설정해야합니다. 따라서 HEAD^을 입력하면 zsh는 glob 부정 표현식을 작성하려고 시도하고 오류로 실패합니다.

즉, setopt extended_glob을 사용하면 ^을 사용하여 globs를 무효화 할 수 있습니다.위의 라인

unsetopt nomatch 

, 우리는 패턴 매칭이 실패 할 때 "있는 그대로", 단순히 명령을 사용하는 것이 원하는 zsh을하는 말 :

하는 것은 문제를 해결하려면, 당신은 .zshrc이 당신에이 줄을 쓸 수 있습니다 .

+0

이 오류를 방지하기 위해'nomatch'를 해제하지 않는 것이 좋습니다. 이것은 사용자가 원하지도 기대하지 않을 수있는 다른 모든 쉘 코드에 대해 노크 동작을합니다. 'git reset HEAD^"'라는 문자열을 인용하는 것이 더 좋을 것입니다.'git reset HEAD \ ^'문자를 이스케이프하거나'git reset HEAD ~ 1'이 맞다면 물결표를 사용하는 것이 더 좋을 것입니다. – Zorawar

+0

그 문제는 보이지 않습니다. 스크립트는'#!/usr/bin/env zsh -f'를 사용할 수 있고,'#!/usr/bin/env zsh'를 사용하면 스크립트가'~/.zshrc'에서 설정을 선택하는 것이 확실하지 않기 때문에. 그렇게되면 문제가 될 수 있습니다. 그리고 나서 스크립트는 확신하기 위해 자체 옵션을 설정해야합니다. 사용자 별 구성에 종속되어서는 안됩니다. – ninrod

+0

사실입니다.하지만 신경 쓰지 않는 패턴을 잡아낼 수있는 예상되는 동작을 변경하기 때문에 적어도 내 시스템에서는이를 망설이지 않습니다. 예를 들어, 'nomatch'가 해제 된'var = (*. fooext)'는 glob 매치가 실패하면 "var."배열에 "* .fooext"라는 문자열을 생성합니다. 그리고 그것은 당신이 기대하는 바가 아닐 수도 있습니다. 그리고 다시, 이것들은 단지 가장자리의 경우일지도 모릅니다. 그리고 나는 그들이 스스로 원하는 시스템을 결정하는 것은 사용자의 몫이라고 생각합니다. – Zorawar

관련 문제