在 Windows Git Bash 与 Windows 电源 Shell 与命令提示符之间有什么区别
On Windows what is the difference between Git Bash vs Windows Power Shell vs Command prompt
我是一个 Mac 的人,习惯了 Mac 的终端。现在我正在使用 Windows.
- 这些 CLI 选项之间有什么区别?
- 我什么时候应该使用一个而不是另一个?
- 还有更多我应该考虑的 CLI 选项吗?
- 如果您是 Mac 试图适应 Windows 的人,您会使用什么 CLI?
我尝试使用 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] =].你可以在里面运行sh
和bash
脚本,也可以调用它安装的Unix程序。
Unix 实用程序通常也可以是 CMD
或 PowerShell
中的 运行,但默认情况下安装程序不会将这些实用程序添加到 SYSTEM 或 USER PATH
,以免潜在地覆盖用户在其他情况下可能使用的相同实用程序。基本上,它将使用 Git Bash
安装的实用程序隔离到 Git Bash
.
在 git
自动化之外,我不建议将 Git Bash
本身用于任何与生产相关的内容,您可能更愿意管理 cygwin
、msys2
的安装,或者在这种情况下你自己的另一个 Unix 兼容层。但是在开发过程中它可以是一个方便的 shell,虽然现在我通常更喜欢 PowerShell
而不是 bash
Windows 脚本。
我是一个 Mac 的人,习惯了 Mac 的终端。现在我正在使用 Windows.
- 这些 CLI 选项之间有什么区别?
- 我什么时候应该使用一个而不是另一个?
- 还有更多我应该考虑的 CLI 选项吗?
- 如果您是 Mac 试图适应 Windows 的人,您会使用什么 CLI?
我尝试使用 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] =].你可以在里面运行sh
和bash
脚本,也可以调用它安装的Unix程序。
Unix 实用程序通常也可以是 CMD
或 PowerShell
中的 运行,但默认情况下安装程序不会将这些实用程序添加到 SYSTEM 或 USER PATH
,以免潜在地覆盖用户在其他情况下可能使用的相同实用程序。基本上,它将使用 Git Bash
安装的实用程序隔离到 Git Bash
.
在 git
自动化之外,我不建议将 Git Bash
本身用于任何与生产相关的内容,您可能更愿意管理 cygwin
、msys2
的安装,或者在这种情况下你自己的另一个 Unix 兼容层。但是在开发过程中它可以是一个方便的 shell,虽然现在我通常更喜欢 PowerShell
而不是 bash
Windows 脚本。