Вопрос: Может ли git-bash и оболочка cygwin делать то же самое?


В Windows 10 можно использовать git-bash и cygwin-оболочку?

Что можно делать, кроме другого, не может?

Например,

  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 может?

Благодарю.


6
2018-03-23 23:29


Источник




Ответы:


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

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


3
2018-03-24 01:04



Вы можете использовать cygpath для конвертирования между форматами окон и форматов unix. - DavidPostill♦
Благодарю. Имя пути в моих командах используется как ключи в таблице реестра, поэтому их можно заменить «\» на «/»? - Tim
Возможно, но см. Предложение в (недавно отредактированном) ответе. - AlwaysLearning


Я просто нашел разницу: я могу запустить этот скрипт в 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)

0
2017-07-03 07:12