9

В 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. Так почему же не работает git-bash, а Cygwin -?

Благодарю.

2 ответа2

6

Разница в том, что Cygwin знает, как обрабатывать так называемые "Win32" пути. Проще говоря, он знает, что «\» является разделителем пути, а не экранирующим символом оболочки, как в Bash. Ошибка, которую вы показали, это то, что Bash интерпретирует «\» как escape-символ. (Изменить: вы можете попробовать заменить один \ на два, чтобы избежать обратной косой черты, чтобы Bash правильно передал команду в reg.exe.)

Сказав это, в то время как Cygwin ищет пути к Windows, ему это не нравится. Документация предупреждает вас об их использовании. Конечно, немного сползание назад время от времени не повредит. Но в то время как вы можете запускать программы Windows в Cygwin, гигиена предлагает вам запускать программы Windows на процессоре CMD.EXE и программы UNIX на Cygwin для вашего долгосрочного здоровья.

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 в Git 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)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .