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中运行程序。那么为什么git-bash不能工作,而cygwin可以呢?

谢谢。

Answers:


10

区别在于Cygwin知道如何处理所谓的“ Win32”路径名。松散地说,它知道“ \”是路径名分隔符,而不是Bash中的shell换码符。您显示的错误是Bash将“ \”解释为转义字符。(编辑:您可以尝试将\替换为\,从而转义反斜杠,以便Bash正确地将命令传递给reg.exe。)

话虽如此,尽管Cygwin使用Windows路径名时却不喜欢这样做。该文档警告您不要使用它们。当然,偶尔向后滑动一点也不痛。但是,尽管可以在Cygwin中运行Windows程序,但卫生方面建议您出于长期的考虑,应该在Cygwin中的CMD.EXE处理器和UNIX中运行Windows程序。


1
您可以使用cygpath在Windows和UNIX路径格式之间进行转换。
DavidPostill

谢谢。我的命令中的路径名用作注册表中的键,因此可以将其中的“ \”替换为“ /”吗?
蒂姆(Tim)

也许可以,但是请参阅(新编辑的)答案中的建议。
AlwaysLearning

1

两者之间有很多重叠之处。但是最终它们是Windows中bash / shall的不同实现。

Cygwin具有大量可安装的可选软件,包括多种不同的编程语言,编译器,各种网络工具,等等。您还可以安装X和许多X应用程序。

使用git bash,您将获得所得到的东西,并且安装其他工具会更加困难。实际上,我的工作站上都​​有两者,因为有些事情我无法在git bash中完成。我在git bash窗口中调用cygwin应用程序也取得了很大的成功。

另外,cygwin是一个完整的posix环境,而不仅仅是bash解释器,因此您经常可以在其中编译非分布式代码,例如,如果您找到了一个不错的Linux工具的源代码,则通常可以将该工具编译为Cygwin。对于git bash来说不多。正如我上面提到的,即使您确实为Cygwin编译了它,也可能无法在git bash中使用。

除此之外,它们大多非常相似。看到git bash包含cygpath用于转换Windows和Posix文件路径的命令是很有趣的,因为git bash afaik基于MinGW,这是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)

这仅表明在cygwin测试的情况下,当前目录中没有以.xml结尾的文件。您应该ls使用命令在当前目录中显示的结果。
彼得-恢复莫妮卡

我相信并非如此,因为我同时在两个终端中运行相同的脚本。文件在那里。
WesternGun

2
有两种可能性:(1)没有此类文件,可能是因为cygwin脚本在其他目录中运行。在这种情况下,外壳将单独保留模式(而不是将其替换为空字符串)。(这听起来几乎是一个错误,直到人们意识到人们可以将模式传递给find未加引号的方式为止。)(2)文件的名称实际上是* .XML(用大写字母表示),并且nocaseglob在git shell中设置了shell选项globs不区分大小写(在Windows上具有一定意义)。
彼得-恢复莫妮卡
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.