O git-bash e o cygwin shell podem fazer as mesmas coisas?

7

No Windows 10, o git-bash e o cygwin shell podem fazer as mesmas coisas?

O que um pode fazer, mas o outro não pode?

Por exemplo,

  1. Como shells, os dois podem funcionar da mesma forma que bash?
  2. Quais programas e comandos podem ser executados em um, mas não no outro?

    Por exemplo, no git-bash, não consigo executar algum comando do Windows:

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

    Mas no Cygwin, corre bem

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

    originalmente eu pensei que git-bash e cygwin podem rodar programas no Windows. Então, por que o git-bash não funciona, enquanto o cygwin pode?

Obrigado.

    
por Tim 24.03.2017 / 00:29

2 respostas

4

A diferença é que o Cygwin sabe como processar os chamados nomes de caminho "Win32". Falando livremente, ele sabe que "\" é um separador de nome de caminho e não um caractere de escape de shell como é no Bash. O erro que você mostrou é Bash interpretando "\" como um caractere de escape. (Edit: você pode tentar substituir um \ com dois, escapando da barra invertida, para que Bash passe o comando para o reg.exe corretamente.)

Tendo dito isso, enquanto o Cygwin usa nomes de caminho do Windows, não gosta de fazer isso. A documentação avisa você sobre o uso deles. Claro, um pouco de volta deslizando de vez em quando não faz mal. Mas enquanto você pode executar programas do Windows no Cygwin, a higiene sugere que você execute programas do Windows no processador CMD.EXE e UNIX no Cygwin para sua sanidade a longo prazo.

    
por 24.03.2017 / 02:04
0

Acabei de encontrar uma diferença: posso executar este script no Git bash, mas não no Cygwin.

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

No Git bash, ele processa meus arquivos xml, mas no Cygwin, isso me dá um erro:

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

bash --version no Git bash:

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

no Cygwin:

GNU bash, versión 4.3.46(7)-release (x86_64-unknown-cygwin)
    
por 03.07.2017 / 09:12