在 Windows(10)CMD shell 中集成 Linux 命令

在 Windows(10)CMD shell 中集成 Linux 命令

在我之前的(Win 7)机器上,我安装了 CygWin,它允许(由于 PATH)我从任何命令 shell 调用 Linux 命令——默认命令 shell、Anaconda 命令等等。

我希望在我的新 Win 10 上拥有同样的功能。我安装了 Linux 子系统(Ubuntu),但我看不到任何允许在其他 shell 中使用 Linux 命令的方法?

有没有办法实现这一点,或者我应该只安装 CygWin?

答案1

Linux 实用程序可以通过两种方式在 Windows 上运行:-

  • 将代码编译为本机 Windows .EXE 文件:这就是 CygWin 所做的,即所有单独的实用程序都可以单独从 Windows shell 直接调用。
  • 在 Windows 中提供一个环境,其中 Linux 本机 ELF 二进制文件可以运行,方式类似于 Linux 在 Wine 下运行 Windows 程序:这就是 Windows Subsystem for Linux 所做的,并且单个程序在该环境之外不会被识别为可执行文件。

bash.exeWSL 环境在运行时启动,您可以通过调用来运行 WSL 实用程序bash.exe,例如:

bash -c ls

如果需要传递参数,则需要引用命令字符串,例如:

bash -c 'ls -l ./Documents/'

我还没有检查 CygWin,但是一些本机 Windows 端口允许其运行字符串具有灵活性(例如,/代替-选项,\代替/目录分隔符) - 使用 WSL 时,您将需要使用严格的 Linux 运行字符串。

答案2

这可能是从 Windows 环境执行 Linux 程序 (WSL)

正如我在这个问题中回答的那样,要运行 Linux 命令,您需要使用选项调用bash。如果路径尚未采用 Linux 格式,-c您还需要使用将路径转换为 ​​Linux 版本。例如,要运行,请像这样调用它wslpathgrepE:\somefile

bash -c "grep 'my string' $(wslpath 'E:\somefile')"

请注意单引号不是 cmd.exe 中的特殊字符,因此你在 cmd 中必须使用双引号.bash -c 'ls -l ./Documents/'就像 AFH 所说的那样行不通。另一方面,在 PowerShell 中,''""都用于引用,其含义与 bash 中相同,因此您可以bash -c 'echo -e "some string"'从 PowerShell 调用而不会出现问题

然而,PowerShell 中也有各种类似 Linux 的别名,如、、ls... ,因此在很多情况下,你可以使用它们而不必借助 WSL bashcatman

如果您使用 Cygwin,那么每个 Unix 实用程序都将编译成单独的 *.exe 文件。您可以运行which lswhich grep轻松获取它们的路径。它们直接在 Windows 环境中运行,而不是在 WSL 中运行,WSL 是一个单独的子系统

相关内容