git-bash 和 cygwin shell 可以做同样的事情吗?

Tim*_*Tim 18 cygwin git-bash

在 Windows 10 上,git-bash 和 cygwin shell 可以做同样的事情吗?

什么可以做而另一个不能?

例如,

  1. 作为 shell,它们可以和 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.
    
    Run Code Online (Sandbox Code Playgroud)

    但是在 Cygwin 中,它运行良好

    $  reg add "HKCU\Software\Microsoft\VisualStudio\14.0_Config\MSBuild" /v EnableOutOfProcBuild /t REG_DWORD /d 0 /f
    The operation completed successfully.
    
    Run Code Online (Sandbox Code Playgroud)

    本来以为 git-bash 和 cygwin 都可以在 Windows 下运行程序。那么为什么 git-bash 不起作用,而 cygwin 可以?

谢谢。

Alw*_*ing 11

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

话虽如此,虽然 Cygwin 可以理解 Windows 路径名,但它不喜欢这样做。该文档警告您不要使用它们。当然,时不时地向后滑一点也无妨。但是,虽然您可以在 Cygwin 中运行 Windows 程序,但建议您应该在 CMD.EXE 处理器中运行 Windows 程序,并在 Cygwin 中运行 UNIX 程序,以确保您的长期理智。

  • 您可以使用 [cygpath](https://cygwin.com/cygwin-ug-net/cygpath.html) 在 windows 和 unix 路径格式之间进行转换。 (2认同)

小智 5

两者之间有很多重叠之处。但最终它们是 Bash shell 的不同实现。

Cygwin 有大量可供安装的可选软件,包括多种不同的编程语言、编译器、各种网络工具等。您还可以安装 X Window 系统和许多 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 是基于 MinGW 的 AFAIK,而 MinGW 是与 Cygwin 不同的系统。