我是一个习惯于使用Mac终端的用户,现在我正在使用Windows。
- 这些CLI选项有什么区别?
- 什么情况下应该使用其中之一?
- 还有其他需要考虑的CLI选项吗?
- 如果你是一个从Mac转到Windows的人,你会使用哪个CLI?
我尝试使用Windows的原因是,我希望确保我的Docker项目的CLI适用于Windows用户,我可以将来自容器的文件写入Windows并确保我的README文件中有Windows用户的说明。基本上,我也要在Windows上测试我所做的一切,比如Python。
我是一个习惯于使用Mac终端的用户,现在我正在使用Windows。
我尝试使用Windows的原因是,我希望确保我的Docker项目的CLI适用于Windows用户,我可以将来自容器的文件写入Windows并确保我的README文件中有Windows用户的说明。基本上,我也要在Windows上测试我所做的一切,比如Python。
Git Bash就是bash
,而bash
在MacOS上也是默认的shell。但它不是Windows上的默认shell,虽然有几个实现(CygWin,MinGW等)。
除了bash
,Git还捆绑了许多POSIX(UNIX/Linux等)工具;为避免与同名的Windows命令发生“碰撞”,最常见的安装选项是以这样的方式安装bash
,即只有在运行bash
时才能使用其他POSIX命令。Git安装程序会创建一个快捷方式来启动此“私有”版本的bash
,因此称之为“git bash”。
Windows命令提示符运行默认的Windows shell CMD.EXE,它是旧的MS-DOS命令shell COMMAND.COM的派生版本。它不如大多数POSIX shells强大;例如,直到最近它才支持if/then/else结构,并且它不支持shell函数或别名(尽管有一些解决这些限制的方法)。
PowerShell更像是一个脚本编写环境。我会把它与UNIX/Linux系统上的Perl进行比较——比标准shell更加强大,但不一定适合在命令行中使用。
需要翻译的内容:
如果我是一个试图适应 Windows 的 Mac 用户... 那就要看情况而定。短期内,使用类似于 bash 的东西会更容易上手。但长远来看,你 —— 更重要的是,你的潜在用户 —— 可能不想依赖第三方工具,特别是对于 Windows 用户来说,这通常会增加额外的学习曲线。
关于在什么时候使用哪种工具...这实际上取决于你想要实现什么——无论是技术功能还是你想向用户展示的界面。如上所述,除非你只需要运行一个 cmdlet(无论是内置的还是你自己创建的),否则我认为 PowerShell 更适合用于脚本编写而不是 CLI。
CMD
(命令提示符)和PowerShell
都是Windows的shell。 CMD.exe
诞生于COMMAND.COM
,后者又来源于MS-DOS
,并具有一些逻辑结构,可以运行程序,处理输出并执行大多数基本任务,你能从一个shell中期望到得到的功能。 它通常被认为非常有限,因为其他shell可以做更多事情,但如果您知道如何使用它,则不无能力。然而,它从未真正“设计过”,新功能在没有明确路线图的情况下被添加。
PowerShell
是一个从头开始设计的shell,与.NET紧密结合,并内置了更现代的语言结构。 Microsoft将Powershell
设计为替代CMD.exe
和批处理脚本,尽管CMD
远未过时。 Powershell
可以直接调用.NET类,本地处理WMI对象,并具有内置的远程处理功能。与批处理脚本相比,它更类似于编程或脚本语言。今天Powershell
周围有一个更强大的社区,一般建议在Powershell
中编写新代码,而不是继续使用批处理(CMD
)脚本。
PowerShell
一开始的感觉很像CMD
。您可以在其中运行程序并处理其输出,在大多数情况下,无论从Powershell
还是从CMD
运行程序,程序都会表现出相同的行为。然而,您很快就会注意到一些区别-不是所有变量都被视为环境变量,变量前缀为$
,而不是用%
包装,并且Powershell
管道比CMD
管道功能更强大。与大多数其他shell语言主要基于文本不同,Powershell
完全面向对象。
您可以在此处阅读更多信息,了解为什么建议使用Powershell
而不是批处理脚本,并且还有关于CMD.exe
和批处理文件的丰富历史。
Git Bash
是在 Windows 上编译的 bash
shell,与 Linux 和 MacOS 上您所熟悉的相同。它具有带有 Git
前缀的名称,表示它是使用Git for Windows安装的,这是一个针对 Git 编译的各种*nix实用程序的包,供与 git 一起使用。您可以在其中运行sh
和bash
脚本,以及使用它安装的 Unix 程序。
Unix 实用程序通常也可以在 CMD
或 PowerShell
中运行,但默认情况下,安装程序不会将这些实用程序添加到系统或用户路径中,以避免潜在地覆盖用户可能在其他情况下使用的相同实用程序。基本上,它将安装了 Git Bash
的实用程序隔离到 Git Bash
中。
除了 git
自动化外,我不建议将 Git Bash
本身用于任何生产相关事项,如果是这种情况,您可能更愿意自己管理 cygwin
、msys2
或另一个 Unix 兼容性层的安装。但在开发过程中拥有一个方便的 shell 可以派上用场,尽管如今我通常更喜欢使用 PowerShell
而不是 bash
进行 Windows 脚本编写。