有没有一种方法在Windows上运行Bash脚本?

137

我已经购买并使用Windows 7 Ultimate,喜欢使用它来开发应用程序。其中一个缺点(与每个操作系统一样)是我无法运行Bash脚本。有没有一种方法可以通过安装一些软件在Windows上运行Bash脚本?即使它不能百分之百正常工作,只要最常见的功能可用就很好。


http://win-bash.sourceforge.net/ - meain
在Windows 10上运行Bash。 - LF00
你可以使用ConEmucmder - stomy
@stormy - 这些是控制台模拟器,不提供 shell。如果您安装了 CMD、PowerShell 或甚至 bash shell,可以使用它们来运行。 - Guss
8个回答

107
安装Cygwin,其中包括Bash及许多其他GNU和Unix实用程序(如果没有它们,则Bash的实用性可能不太大)。

另一种选择是MinGW's MSYS,它包括bash和一小部分更重要的实用工具,例如awk(您还可以检查竞争性分支-Mingw-w64)。个人而言,我更喜欢Cygwin,因为它包括Perl和Python等重量级工具,我发现我无法离开它们,而MSYS则忽略了这些并假设您将自己安装它们。

更新: 如果有人对此答案感兴趣并运行MS-Windows 10,请注意,MS-Windows 10具有“Windows子系统Linux”功能-启用后-可以安装Ubuntu的用户模式映像,然后在其中运行Bash。这提供与Ubuntu的100%兼容性,用于调试和运行Bash脚本,但此设置完全独立于Windows,您无法使用Bash脚本与Windows功能(例如进程和API)进行交互,除了通过DrvFS功能对文件进行有限访问。


2
请参阅Windows Subsystem for Linux (WSL)文档以获取更多信息。 - stomy
1
WSL现在已经被Windows 10 S弃用了... :( - Javier García Manzano
4
并非被弃用,只是这是一项特性,如果你购买的是较便宜的Windows“小型版”,则无法获得此功能。我记得在家庭版中也不可用。 - Guss
@MuhammadFaizanKhan - Git的Windows端口以及其他一些“命令行导向”的应用程序(Github Desktop是一个显著的例子)也带有Bash的Windows端口。这些通常是MinGW端口(即使用MinGW和MSYS进行编译以实现Posix兼容性)。具体来说,如果您查看Git for Windows安装,您会看到包含基本上是MSYS的mingw32目录。因此,Git for Windows是包括Git(在MSYS安装程序中是可选的)的MinGW,并带有一个“更好”的安装程序:https://superuser.com/a/1362301/10942 - Guss
@Jdeep,这个网站确实有点老了,但正确的链接是https://osdn.net/projects/mingw。你提供的Mingw-w64项目是一个早于此答案的分支,我应该知道并提到它。感谢您让我知道,我会更新答案。 - Guss
显示剩余2条评论

66
我能找到的最好选择是Git Windows。只需安装后,在文件夹中右键单击并单击“Git Bash Here”,即可打开一个类似于Linux终端的Bash窗口进入图像描述 这将打开一个类似于这样的Bash窗口:进入图像描述 并且可以使用Linux命令...
我尝试过'sh','vi','ssh','curl'等命令。

7
如果你只需要MinGW的shell,那么最好只安装MinGW而不要额外添Git这个臃肿的东西。 - Stefan Z Camilleri
我已经安装了Github桌面版(因此也安装了Git),但我隐藏了上下文菜单项,所以我只需点击Windows开始按钮,然后键入Bash并按Enter打开“Git Bash”(实际上是MinGW)。 - gamingexpert13

31

如果你想要更本地化的解决方案,可以使用getGnuWin32来安装所有已移植的Unix命令行工具。再加上winBash,你就会得到几乎完整的Unix环境。为了获得更好的终端仿真器,建议增加console2,这样你几乎分不出自己是在Windows上了!

Cygwin总体而言是一个更好的工具包,但由于它与Windows之间的差异,我发现自己遇到了一些意外问题。虽然如此,这些解决方案也不能与本地Linux系统相比。

你可能想考虑使用virtualbox创建一个与所选版本的发行版的linux VM。将其设置为与主机操作系统共享文件夹,你就可以使用真正的Linux开发环境,并与Windows共享。只需要注意那些EOL标记,因为它们有时会给你带来麻烦。


Or CoLinux:http://www.colinux.org/ - Guss
colinux目前还不支持64位操作系统。 - hexicle
有没有人知道 win-bash 项目的继任者是什么?它不再得到积极开发,并且停留在 bash v1.14(截至本帖发布时,bash proper 版本为 v4.4)。 - Bjartr
@Bjartr 微软的开发人员增加了一项功能,允许在Windows 7上运行native版本的bash - Spencer Rathbun
@SpencerRathbun 这只能在Windows 10上运行,我碰巧使用的是Windows 7。我也不确定它在混合Linux和Windows可执行文件和路径方面的表现如何,因此从我的角度来看,它可能并不比Cygwin Bash更好。 - Bjartr
@hexicle 目前64位方面有一些进展,但还不够完善,可以参考colinux64 - PYK

19

最好的选择?Windows 10。原生支持Bash!


3
不,这不是最佳选择。 你只需在Linux上运行,而不是在Windows的bash中运行 - 你无法从该bash中启动Windows可执行文件(除非你使用cbwin绕过它......但这已经是太多的麻烦,仅仅是为了解决问题)。 - ankostis
“最好”的选项可能是个人口味问题。所以也许你是对的。然而,它确实使我能够在我的Windows电脑上运行任何(好吧..大多数)bash脚本。 - Paul0515
2
你可以运行几乎所有的bash脚本 - 只要它们不尝试与主机操作系统(Windows)交互。WSL bash是一个轻量级虚拟化子系统,可以执行原始的 ELF 二进制文件(即Ubuntu)- 但你无法逃脱它! - ankostis

13

你可以随时安装Cygwin在Windows下运行Unix shell。我曾经在Windows XP上广泛使用过Cygwin。


在Cygwin中运行UNIX Shell需要安装哪个软件包? - Tower
@rFactor Cygwin页面包含一个带有所有必要组件的Windows安装程序。 - Spencer Rathbun
Cygwin网站解释了已经移植的内容以及如何安装它。如果你只想要一个shell,那么基本的Cygwin安装就足够了。 - Michael Shopsin

11
安装git-extensions (http://gitextensions.github.io/) 后,您可以从命令提示符中运行.sh文件。(无需 ./script.sh ,只需像运行.bat/cmd文件一样运行即可) 或者您可以在MinGW Git bash shell中使用“完整”的bash环境来运行它们。 我不是cygwin的忠实粉丝(是的,我确定它真的很强大),因此在Windows上运行bash脚本而无需安装它对我来说非常完美。

1
我不知道什么是git-extensions,但它的描述说它是一个用于git的图形用户界面。你如何从这个工具运行shell脚本?也许你的意思是使用它包含的msys bash来运行它们? - Miserable Variable
只是确认一下 - git-extensions 包含了 bash 的副本并将其设置在路径中。我尝试从 powershell 实例中运行 bash,失败了,安装了 git-extensions 后再次尝试,结果成功了。 - rtpHarry

6
为了本地运行,您可能需要使用Cygwin(在使用Windows时我无法没有它)。因此,首先要+1 Cygwin。其他任何东西都是不文明的。
然而,话虽如此,我最近开始使用一些工具的组合,轻松将Bash脚本移植到Windows,以便我的反Linux同事可以轻松运行更好地处理GNU实用程序的复杂任务。
我通常可以在很短的时间内将Bash脚本移植到批处理中,方法是在一个窗格中打开原始脚本,在另一个窗格中编写批处理文件。 我使用的工具如下:
- UnxUtils (http://sourceforge.net/projects/unxutils/) - Bat2Exe (http://bat2exe.net/)
我更喜欢UnxUtils而不是GnuWin32,因为事实上 [如果我错了,请有人纠正] GnuWin实用程序通常必须安装,而UnxUtils是独立的二进制文件,可以直接使用。
然而,CoreUtils不包括一些熟悉的*NIX实用程序,例如cURL,它也可用于Windows(curl.haxx.se/download.html)。
我创建一个项目文件夹,并且总是在.bat文件中设置PATH =。以便除了基本CMD shell命令之外没有引用其他命令(以及项目文件夹所需的特定UnxUtils,以使批处理脚本按预期功能)。
然后,我将所需的CoreUtils .exe文件复制到项目文件夹中,并在.bat文件中引用它们,例如“.\ curl.exe-s google.com”等。
Bat2Exe程序是魔法发生的地方。一旦您的批处理文件完成并已经成功测试,请启动Bat2Exe.exe,并指定项目文件夹的路径。 Bat2Exe将创建一个Windows二进制文件,其中包含该特定文件夹中的所有文件,并将使用遇到的第一个.bat作为主可执行文件。您甚至可以包含.ico文件以用作生成的最终.exe文件的图标。
我尝试过几种此类程序,其中许多生成的二进制文件被标记为恶意软件,但我引用的Bat2Exe版本完美地工作,并且生成的.exe文件完全干净。
生成的可执行文件可以通过双击交互式运行,也可以像普通批处理文件一样在命令行中带参数运行等,除此之外,您将能够利用许多常用于Bash的工具的功能。我意识到这篇文章已经变得相当长了,但是如果我可以稍微离题一下,我还编写了一个称为PortaBashy的批处理脚本,我的同事可以从网络共享中启动它,该共享包含一个便携式的Cygwin安装。然后,它将把%PATH%变量设置为正常的*NIX格式(/usr/bin:/usr/sbin:/bin:/sbin),等等,可以启动Bash shell本身或启动功能更强大、外观更漂亮的MinTTY终端仿真器。总之,有很多方法可以实现您想要做的事情;只需要结合适当的工具,而且很多时候取决于个人喜好。

3

还有一种理论可能性:Windows的专业版本内置了POSIX支持,因此bash可以在Windows上进行本地编译。

可惜的是,我自己还没有找到一个已经编译好的...


3
Windows上的POSIX子系统已经被废弃[1]。取而代之的是基于“Drawbridge”轻量级虚拟化系统的“Windows子系统Linux”,用于运行未修改的Ubuntu Bash。但是,有一些细微差别,例如进入该系统后,您将无法再调用Windows可执行文件! [1] https://blogs.msdn.microsoft.com/wsl/2016/04/22/windows-subsystem-for-linux-overview/ - ankostis
@ankostis,实际上,使用CU您可以... - Paul0515

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接