git-bash와 cygwin shell이 ​​같은 일을 할 수 있습니까?


13

Windows 10에서 git-bash와 cygwin shell이 ​​같은 작업을 수행 할 수 있습니까?

하나는 무엇을 할 수 있지만 다른 하나는 할 수 없습니까?

예를 들어

  1. 쉘처럼 둘 다 bash와 동일하게 작동 할 수 있습니까?
  2. 어떤 프로그램과 명령이 한 프로그램에서 실행될 수 있지만 다른 프로그램에서는 실행될 수 없습니까?

    예를 들어, git-bash에서는 Windows 명령을 실행할 수 없습니다.

    $  reg add "HKCU\Software\Microsoft\VisualStudio\14.0_Config\MSBuild" /v EnableOutOfProcBuild /t REG_DWORD /d 0 /f
    ERROR: Invalid syntax.
    Type "REG ADD /?" for usage.
    

    그러나 Cygwin에서는 잘 작동합니다.

    $  reg add "HKCU\Software\Microsoft\VisualStudio\14.0_Config\MSBuild" /v EnableOutOfProcBuild /t REG_DWORD /d 0 /f
    The operation completed successfully.
    

    원래 git-bash와 cygwin은 모두 Windows에서 프로그램을 실행할 수 있다고 생각했습니다. cygwin은 왜 git-bash가 작동하지 않습니까?

감사.

답변:


10

차이점은 Cygwin이 소위 "Win32"경로 이름을 처리하는 방법을 알고 있다는 것입니다. 느슨하게 말해서, "\"는 경로 이름 구분자이며 Bash와 같은 쉘 이스케이프 문자가 아니라는 것을 알고 있습니다. 표시 한 오류는 Bash가 "\"를 이스케이프 문자로 해석하는 것입니다. (편집 : 1 \를 2로 바꾸어 백 슬래시를 이스케이프 처리하여 Bash가 reg.exe로 명령을 올바르게 전달하도록 시도하십시오.)

Cygwin이 Windows 경로 이름을 알아내는 동안 그렇게하지는 않습니다. 문서 를 사용하는 당신을 경고합니다. 물론, 조금 뒤로 미끄러 져도 아프지 않습니다. 그러나 Cygwin에서 Windows 프로그램을 실행할 수는 있지만 위생 상 CMD.EXE 프로세서에서 Windows 프로그램을 실행하고 장기적으로 건강을 유지하려면 Cygwin에서 UNIX 프로그램을 실행해야합니다.


1
cygpath 를 사용 하여 창과 유닉스 경로 형식간에 변환 할 수 있습니다 .
DavidPostill

감사. 내 명령의 경로 이름이 레지스트리 테이블에서 키로 사용되므로 "\"를 "/"로 바꿀 수 있습니까?
Tim

어쩌면 (신규 편집 된) 답변의 제안을 참조하십시오.
AlwaysLearning 2016 년

1

둘 사이에 많은 중복이 있습니다. 그러나 궁극적으로 그들은 Windows에서 bash / shall의 다른 구현입니다.

Cygwin에는 다양한 프로그래밍 언어, 컴파일러, 다양한 네트워크 도구 등을 포함하여 설치할 수있는 옵션 소프트웨어가 많이 있습니다. X 및 많은 X 응용 프로그램을 설치할 수도 있습니다.

git bash를 사용하면 얻는 것을 얻을 수 있으며 추가 도구를 설치하는 것이 조금 더 어렵습니다. git bash에서 할 수없는 일이 있기 때문에 실제로 워크 스테이션에 둘 다 있습니다. git bash 창에서 cygwin 앱을 호출하는 데 매우 혼합 된 성공을 거두었습니다.

또한 cygwin은 bash 인터프리터가 아닌 전체 posix 환경이므로 배포되지 않은 코드를 컴파일 할 수 있습니다. 예를 들어 멋진 Linux 도구의 소스를 찾은 경우 일반적으로 해당 도구를 컴파일 할 수 있습니다 Cygwin. git bash에는 그리 많지 않습니다. 그리고 위에서 언급했듯이 Cygwin 용으로 컴파일하더라도 git bash에서는 작동하지 않을 것입니다.

그 외에는 대부분 매우 유사합니다. cygpathgit bash afaik은 Cygwin과는 별개의 솔루션 인 MinGW를 기반으로하기 때문에 git bash에 Windows 및 Posix 파일 경로를 변환 하는 명령이 포함되어 있다는 것은 매우 재미있는 일입니다.


0

방금 차이점을 발견했습니다 .Git bash 에서이 스크립트를 실행할 수 있지만 Cygwin에서는이 스크립트를 실행할 수 없습니다.

for file in *.xml; do
    echo "Processing file: $file"
    sed -r 's:<Autorizado>([0-9]+)</Autorizado>:<Autorizado>00013069</Autorizado>:' -i "$file"
    # ...
done

Git bash에서는 내 XML 파일을 처리하지만 Cygwin에서는 오류가 발생합니다.

Processing file: *.xml
sed: cannot read *.xml: No such file or directory

bash --version 힘내 bash에서 :

GNU bash, version 4.3.42(5)-release (x86_64-pc-msys)

Cygwin에서 :

GNU bash, versión 4.3.46(7)-release (x86_64-unknown-cygwin)

이것은 cygwin 테스트의 경우 현재 디렉토리의 .xml로 끝나는 파일이 없음을 나타냅니다. ls명령을 사용하여 현재 디렉토리에 결과를 표시해야합니다 .
피터-모니카

두 터미널에서 동시에 같은 스크립트를 실행하고 있기 때문에 이것이 사실이 아니라고 생각합니다. 파일이 있습니다.
WesternGun

2
두 가지 가능성이 있습니다. (1) cygwin 스크립트가 다른 디렉토리에서 실행되기 때문에 이러한 파일이 없을 수 있습니다. 이 경우 쉘은 패턴을 빈 문자열로 바꾸는 대신 패턴 만 남겨 둡니다. (이것은 find인용되지 않은 방식으로 패턴을 전달할 수 있음을 알 때까지 거의 항상 실수처럼 들립니다 .) (2) 파일 이름은 실제로 * .XML (대문자)이며 쉘 옵션 nocaseglob은 git shell making에 설정됩니다 globs는 대소 문자를 구분하지 않습니다 (Windows에서는 의미가 있습니다).
복직 자 Monica Monica
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.