【问题标题】:Is there a way to run Bash scripts on Windows? [closed]有没有办法在 Windows 上运行 Bash 脚本? [关闭]
【发布时间】:2011-09-18 19:03:51
【问题描述】:

我已购买并使用 Windows 7 Ultimate,我喜欢用它来开发应用程序。缺点之一(与每个操作系统一样)是我无法运行 Bash 脚本。有没有办法通过安装一些软件在 Windows 上运行 Bash 脚本?如果它不能 100% 工作,那没关系,但只要最常用的功能可用,它就应该很棒。

【问题讨论】:

标签: windows bash


【解决方案1】:

安装 Cygwin,其中包括 Bash 以及许多其他 GNU 和 Unix 实用程序(没有它们,bash 无论如何都不太可能非常有用)。

另一个选项是MinGW's MSYS,其中包括 bash 和一组更重要的实用程序,例如 awk(您可能还想检查竞争分支 - Mingw-w64)。就我个人而言,我更喜欢 Cygwin,因为它包含诸如 Perl 和 Python 之类的繁重工具,我发现我离不开它们,而 MSYS 忽略了这些,并假设您将自己安装它们。

更新: 如果有人对此答案感兴趣并且正在运行 MS-Windows 10,请注意 MS-Windows 10 具有“Windows Subsystem For Linux”功能,一旦启用,您就可以安装 Ubuntu 的用户模式映像,然后运行 ​​Bash在那。这为调试和运行 Bash 脚本提供了与 Ubuntu 的 100% 兼容性,但此设置完全独立于 Windows,您不能使用 Bash 脚本与 Windows 功能(例如进程和 API)交互,除非通过 @987654325 对文件进行有限访问@ 特征。

【讨论】:

  • WSL 现在已在 Windows 10 S 中弃用... :(
  • 未弃用,这只是您购买更便宜的 Windows“Small edition”时无法获得的功能之一。它在家庭版 IIRC 中也不可用。
  • @MuhammadFaizanKhan - Git 移植到 Windows,以及其他一些“面向命令行”的应用程序(Github Desktop 作为一个显着的例子)也带有 Windows 移植 Bash。这些通常不是 MinGW 端口(即使用 MinGW 和 MSYS 编译以实现 Posix 兼容性)。具体来说,如果您查看用于 Windows 的 Git 安装,您会看到基本上包含 MSYS 的 mingw32 目录。所以适用于 Windows 的 Git 是 MinGW,它包含带有“更好”安装程序的 Git(它在 MSYS 安装程序中是可选的):superuser.com/a/1362301/10942
【解决方案2】:

我能找到的最佳选择是Git Windows 只需安装它,然后右键单击并单击“Git Bash Here”,这将打开一个 bash 窗口

这将打开一个像这样的 bash 窗口:

而且 linux 命令可以工作...

我尝试过 'sh' 、 'vi' 、 'ssh' 、 'curl' 等...命令

【讨论】:

  • 如果你想要的只是它的外壳,你也可以只安装 MinGW 而不需要额外的 Git。
【解决方案3】:

如果您正在寻找更原生的东西,您可以使用getGnuWin32 安装所有已移植的 Unix 命令行工具。这加上winBash 为您提供了大部分 的工作 Unix 环境。添加console2 以获得更好的终端仿真器,您几乎无法判断您使用的是 Windows!

Cygwin 总体上是一个更好的工具包,但由于它与 Windows 之间的鸿沟,我发现自己遇到了意想不到的问题。不过,这些解决方案都不如原生 Linux 系统。

您可能想考虑使用virtualbox 来创建一个带有您选择的发行版的Linux VM。设置成与主机操作系统共享文件夹,即可使用真正的linux开发环境,与windows共享。请注意那些 EOL 标记,它们每次都会得到您。

【讨论】:

  • 或 CoLinux : colinux.org
  • colinux 不能在 64 位(目前)上运行
  • 有人知道win-bash 项目的继任者吗?它不再积极开发并停留在 bash v 1.14 上(截至本文,bash 本身是 v 4.4)
  • @Bjartr Microsoft 人员添加了一项功能,允许native version of bash to run on windows 7
  • @SpencerRathbun 这只能在 Windows 10 上运行,我恰好在 Windows 7 上。我也不确定它如何混合 linux 和 Windows 可执行文件和路径,所以它可能不会更好(从我的角度来看)比 cygwin bash。
【解决方案4】:

您始终可以安装 Cygwin 以在 Windows 下运行 Unix shell。我在 Window XP 中广泛使用 Cygwin。

【讨论】:

  • 我需要安装什么包才能在 Cygwin 中运行 UNIX Shell?
  • @rFactor Cygwin 页面包括一个带有所有必要组件的 Windows 安装程序。
  • Cygwin 站点解释了已移植的内容以及如何安装它。如果你想要的只是一个 shell,那么基本的 Cygwin 安装就足够了。
【解决方案5】:

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

【讨论】:

  • 不,不是最佳选择。您只是以这种方式运行 linux,而不是在 windows 中运行 bash - 您无法从该 bash 启动 Windows 可执行文件(除非您使用 cbwin 解决它......但这对于解决方法来说已经大惊小怪了)。
  • “最佳”选项可能是个人喜好问题。所以也许你是对的。但是,它确实使我能够在我的 Windows PC 上运行任何(嗯..大多数)bash 脚本。
  • 您可以运行虚拟的所有 bash 脚本 - 只要它们不尝试与主机操作系统 (Windows) 交互。 WSL bash 是一个轻量级虚拟化 子系统,可以执行原始 ELF 二进制文件(即Ubuntu)——但你无法逃脱它!
【解决方案6】:

安装 git-extentions (http://gitextensions.github.io/) 后,您可以从命令提示符运行 .sh 文件。 (不需要 ./script.sh,只需像 bat/cmd 文件一样运行它) 或者,您可以使用 MinGW Git bash shell 在“完整”bash 环境中运行它们。

我不是 Cygwin 的忠实粉丝(是的,我确信它真的很强大),所以在 Windows 上运行 bash 脚本而无需安装它非常适合我。

【讨论】:

  • 我不知道 git-extensions 是什么,但它的描述说它是 git 的图形用户界面。你将如何从这个工具运行 shell 脚本?也许您的意思是使用它包含的 msys bash 运行它们?
  • 只是为了确认 - git-extensions 确实包含 bash 的副本并将其设置在路径中。我从 powershell 实例尝试了bash,但失败了,安装了 git-extensions 并重试,它对我有用。
【解决方案7】:

为了在本地运行,您可能需要使用 Cygwin(使用 Windows 时我离不开它)。所以马上开始,为 Cygwin +1。其他任何东西都是不文明的。

不过,话虽如此,我最近开始使用组合实用程序来轻松地将 Bash 脚本移植到 Windows,以便我的反 Linux 同事可以轻松地运行由 GNU 实用程序更好地处理的复杂任务。

我通常可以在很短的时间内将 Bash 脚本移植到 Batch,方法是在一个窗格中打开原始脚本并在另一个窗格中编写 Batch 文件。我使用的工具如下:

比起 GnuWin32,我更喜欢 UnxUtils,因为 [如果我错了,请指正] GnuWin utils 通常必须安装,而 UnxUtils 是开箱即用的独立二进制文件。

但是,CoreUtils 不包含一些熟悉的 *NIX 实用程序,例如 cURL,它也可用于 Windows (curl.haxx.se/download.html)。

我为项目创建了一个文件夹,并且总是 SET PATH=。在 .bat 文件中,以便除基本 CMD shell 命令之外不引用其他命令(以及项目文件夹中所需的特定 UnxUtils 以使批处理脚本按预期运行)。

然后我将需要的CoreUtils .exe文件复制到项目文件夹中,并在“.\curl.exe -s google.com”等.bat文件中引用它们。

Bat2Exe 程序是奇迹发生的地方。批处理文件完成并成功测试后,启动 Bat2Exe.exe,并指定项目文件夹的路径。 Bat2Exe 然后将创建一个包含该特定文件夹中所有文件的 Windows 二进制文件,并将使用它遇到的第一个 .bat 作为主要可执行文件。您甚至可以包含一个 .ico 文件,用作生成的最终 .exe 文件的图标。

我已经尝试了一些此类程序,并且许多生成的二进制文件都被标记为恶意软件,但我引用的 Bat2Exe 版本运行良好,并且生成的 .exe 文件扫描完全干净。

生成的可执行文件可以通过双击以交互方式运行,或者从命令行使用参数等运行,就像常规批处理文件一样,除了您将能够利用您所使用的许多工具的功能通常会在 Bash 中使用。

我意识到这会变得很长,但如果我可能离题一点,我还编写了一个批处理脚本,我称之为 PortaBashy,我的同事可以从包含便携式 Cygwin 安装的网络共享启动它。然后它将 %PATH% 变量设置为正常的 *NIX 格式(/usr/bin:/usr/sbin:/bin:/sbin)等,并且可以启动到 Bash shell 本身或启动更强大的漂亮的 MinTTY 终端模拟器。

总是有很多方法可以完成你想做的事情;这只是为工作组合正确工具的问题,而且很多时候归结为个人喜好。

【讨论】:

    【解决方案8】:

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

    可惜,我自己还没找到编译好的……

    【讨论】:

    • Windows 上的 POSIX sybsystem 已被废弃 [1]。被基于“Drawbridge”轻量级虚拟化系统运行未修改的Ubuntu-bash的“Linux的Windows子系统”取代。但是有一些细微差别,例如一旦进入这个系统,你就不能再调用 Windows 可执行文件了! [1]blogs.msdn.microsoft.com/wsl/2016/04/22/…
    • @ankostis,实际上,使用 CU 你可以...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-01
    • 2022-01-08
    • 1970-01-01
    • 2015-02-16
    • 1970-01-01
    相关资源
    最近更新 更多