Windows:如何让 cygwin bash.exe 在命令行中优先于 wsl?

Windows:如何让 cygwin bash.exe 在命令行中优先于 wsl?

我在 Windows 11 上安装了 cygwin。现在,当我打开 Windows 命令行时,我希望命令bash.exe运行 cygwin 的 bash 命令,而不是与 wsl(适用于 Linux 的 Windows 子系统)链接的 bash。换句话说,当我运行时,bash.exe我不想看到“适用于 Linux 的 Windows 子系统没有安装发行版。”消息,而是从我的 cygwin 安装中运行 bash。我尝试将 cygwin 的“bin”目录添加到 Windows PATH 环境变量中,但没有效果。

编辑

最初,我写道将 cygwin 的“bin”文件夹路径添加到 Windows PATH 环境变量中没有任何效果,虽然bash-exe从 Windows cmd shell 运行确实如此,但实际上它同时解决了从 Python 脚本运行的问题bash.exe,这实际上是我的问题。我以为无论是从 cmd shell 还是从 Python 脚本运行,运行命令的行为都是一样的,但显然是有区别的。

答案1

当您说“命令行”时,我会假设您指的是 CMD shell,尽管您可能指的是 PowerShell。

对于 CMD,最简单的方法可能是使用doskey别名bash

doskey bash=D:\cygwin\bin\bash.exe $*

要使此设置永久生效,请参阅这个答案

对于 PowerShell,使用New-Alias等效项并在 PowerShell 配置文件中设置它。


其他选择:

Windows 终端

但是,您可能需要考虑另外两个工具来使这甚至(在我看来)更容易:

这两个都是微软产品,都可以从微软商店安装。

您可以在 Windows 终端中设置一个名为“Bash”的 Cygin 配置文件,然后使用 PowerToys 运行,通过 激活它_Bash。任何终端配置文件的前缀都是_,但如果您经常使用它,您甚至可以跳过它。Power Run 将根据使用情况将其排到顶部。

我建议打开选项在新选项卡中打开个人资料在 PowerToys Run 的“Windows 终端”设置中。

调整路径

您可以调整路径,但您需要在当前 CMD 或 PowerShell 会话中执行此操作,因此您仍然需要启动 CMD 脚本或 PowerShell 配置文件。考虑到这一点,我认为 Alias 方法可能更好。

答案2

我遇到与作者相同的问题,安装了 WSL 和 Cygwin。

我设置了 PATH:Win+Pause - 高级系统设置 - 环境变量 - 用户和系统部分中的 PATH 首先都是 C:\Cygwin64\bin。计算机已重新启动。

我运行 Win+R-cmd.exe

设置路径

我首先看到 c:\Cygwin64\bin。

其中 bash

执行程序:\cygwin64\bin\bash.exe 执行程序:\Windows\System32\bash.exe

bash-bash 已启动

$ uname

CYGWIN_NT-10.0-19045

$ cat /etc/发布

猫:'/etc/发布': 没有这样的文件或目录

但是。Win-R - bash

$uname

Linux

$cat /etc/发布

DISTRIB_ID=Ubuntu DISTRIB_RELEASE=22.04 DISTRIB_CODENAME=jammy DISTRIB_DESCRIPTION="Ubuntu 22.04.3 LTS" ...

如果我尝试在桌面上创建快捷方式:

上下文菜单 - 新建 - 快捷方式 - 输入项目的位置 - 输入“bash” - 下一步 - 完成

然后使用目标创建快捷方式:C:\Windows\System32\bash.exe

相关内容