在 Windows Git Bash 与 Windows 电源 Shell 与命令提示符之间有什么区别

On Windows what is the difference between Git Bash vs Windows Power Shell vs Command prompt

我是一个 Mac 的人,习惯了 Mac 的终端。现在我正在使用 Windows.

我尝试使用 Windows 的原因是我想确保我的 Docker 项目的 CLI 为 Windows 用户工作,我可以编写来自我的容器 Windows 并确保我的 README 文件包含针对 Windows 用户的说明。基本上也测试我在 Windows 上所做的一切,比如 Python.

Git bash 是 bash,IIRC 也是 MacOS 上的默认 shell。它不是 Windows 上的默认 shell,尽管存在多个实现(CygWin、MinGW、...)。
Git 除了 bash 之外,还捆绑了一些 POSIX (UNIX/Linux/etc.) 实用程序;为了避免与类似命名的 Windows 命令发生“冲突”,最常见的安装选项是安装 bash,这样其他 POSIX 命令仅在 运行宁bash。 Git 安装程序将创建一个快捷方式来启动这个“私有”版本的 bash,因此是“git bash”。

Windows命令提示符运行是默认的Windowsshell、CMD.EXE,它是旧MS-DOS的派生词命令 shell、COMMAND.COM。它比大多数 POSIX shells 的能力要差得多;例如,它直到最近才支持 if/then/else 构造,并且它不支持 shell 函数或别名(尽管对于这些限制有一些解决方法)。

PowerShell 更像是一个脚本环境。我将它与 UNIX/Linux 系统上的 Perl 进行比较——比标准 shell 强大得多,但不一定是我想在命令行中使用的东西。
需要注意的一件事是,一些更好的 PowerShell 功能可能需要您更新您的 PowerShell 版本——与 Windows 捆绑在一起的版本通常有几年的历史。并且更新 PowerShell 通常需要管理员权限;根据版本,您可能还需要更新 .NET 框架。


如果我是一个 Mac 试图适应 Windows 的人……这取决于。在短期内,使用像 bash 这样熟悉的东西会更容易。但从长远来看,您 - 更重要的是,您的潜在用户 - 可能不希望依赖第三方工具,特别是因为 Windows 用户通常会出现额外的学习曲线。

至于何时使用哪个...这实际上取决于您要完成的任务——无论是在技术功能方面,还是在您希望向用户呈现的界面方面。如上所述,我认为 PowerShell 比 CLI 更适合编写脚本,除非您只需要 运行 一个 cmdlet(built-in 或您自己创建的)。

这是 high-level 对 shell 之间的一些差异的概述,而不是逐项比较。


CMD(命令提示符)和 PowerShell 都是 Windows 的 shell。 CMD.exe 源自 COMMAND.COM,后者本身源自 MS-DOS,并具有一些逻辑结构,可以 运行 编程、处理输出并执行您期望的大多数基本任务来自 shell。根据其他 shell 的功能,它通常被认为非常有限,但如果您知道如何使用它,则并非无能为力。然而,它从未真正“设计”过,在没有明确路线图的情况下添加了新功能。

Powershell 是一个 shell 从头开始​​设计的,与 .NET 相关联并且内置了更多现代语言结构。微软设计 Powershell 作为 CMD.exe 和批处理脚本,尽管 CMD 远未被弃用。 Powershell 可以直接调用 .NET 类,在本机使用 WMI 对象,并内置远程处理功能。与批处理脚本相比,它更类似于编程或脚本语言。今天围绕 Powershell 的社区比批处理脚本要强大得多,通常建议在 Powershell 中编写新代码而不是继续使用批处理 (CMD) 脚本。

Powershell 一开始确实感觉像 CMD。您可以在其中 运行 程序并处理它们的输出,在大多数情况下,无论程序是来自 Powershell 的 运行 还是来自 CMD,它们的行为都完全相同。但是,您很快就会注意到一些差异 - 并非所有变量都被视为环境变量,变量以 $ 为前缀而不是包裹在 % 中,并且 Powershell 管道远不止于此比 CMD 管道强大。 Powershell 也完全是 object-oriented,与大多数其他主要基于文本的 shell 语言相比,这是独一无二的。

You can read more here 关于为什么 Powershell 优于批处理脚本的原因,CMD.exe 和批处理文件也有很多历史记录。


Git Bash 与您在 Linux 和 MacOS 上习惯使用的 bash shell 相同,但编译为 Windows。它有 Git 前缀和名称,表明它是与 Git for Windows 一起安装的,git 的包装和为 Windows 编译的各种 *nix 实用程序,用于 [=76] =].你可以在里面运行shbash脚本,也可以调用它安装的Unix程序。

Unix 实用程序通常也可以是 CMDPowerShell 中的 运行,但默认情况下安装程序不会将这些实用程序添加到 SYSTEM 或 USER PATH ,以免潜在地覆盖用户在其他情况下可能使用的相同实用程序。基本上,它将使用 Git Bash 安装的实用程序隔离到 Git Bash.

git 自动化之外,我不建议将 Git Bash 本身用于任何与生产相关的内容,您可能更愿意管理 cygwinmsys2 的安装,或者在这种情况下你自己的另一个 Unix 兼容层。但是在开发过程中它可以是一个方便的 shell,虽然现在我通常更喜欢 PowerShell 而不是 bash Windows 脚本。