如何在WSL Linux外壳中运行Windows 10程序?

2020-08-28

如何在WSL Linux外壳中运行Windows 10程序?

【51CTO.com快译】Windows Subsystem for Linux(WSL)让您可以直接在Linux外壳中运行Windows 10程序,弥合了Windows和Linux之间的鸿沟。

WSL的优势之一是,您不仅可以在Windows 10中运行Linux发行版,还可以灵活地在Linux中运行Windows 10程序。

这一功能使Linux可以控制Windows的诸多方面,或者使Windows程序能够与WSL文件系统或Linux命令处理的输出进行交互。

它还让WSL用户可以创建影响Linux发行版的复杂外壳脚本,还可以用于在Windows 10中执行命令。

如何从WSL Linux启动Windows 10可执行文件?

Windows 10和Linux都使用“PATH”变量,该变量含有您在执行程序时搜索的文件夹列表。

如果您尝试运行某个程序,但在PATH中找不到该程序,Linux和Windows都会告诉您找不到该程序。在这种情况下,您需要使用完整路径(比如“C:\Notepad2\Notepad.exe”)来启动程序。

Windows 10启动WSL发行版时,它会配置Linux PATH变量,以包含标准的Linux二进制文件夹和常规的Windows 10路径。

您可以通过在WSL外壳提示符下键入env |grep“ PATH”命令来查看该路径。

图1. PATH变量

注意:平常的Windows驱动器号会自动挂载在‘/ mnt / c’或‘/ mnt / d’等下面。

您在WSL外壳中时,只需键入全名(包括.exe扩展名),即可执行Windows 10程序。

如果执行命令时不包括.exe扩展名,WSL会认为它是Linux命令。

比如说,如果您想启动Windows记事本来编辑PHP源文件,应输入以下命令:

  1. notepad.exe test.php 

该命令将让您可以使用记事本而不是普通的Linux文本编辑器来编辑Linux文件。

如果您想启动不在PATH中的程序,需要指定完整文件名。

比如说,如果您想使用7Zip来存档文件夹,但是该文件夹不在路径中,您可以使用以下命令:

  1. "/mnt/c/program files/7-zip/7z.exe" a -tzip code.zip code/ 

请注意,由于“program files”含有空格,因此我们不得不将7z.exe命令括在引号中。

应注意的是,您将无法在WSL中启动需要管理员权限的Windows 10程序。同样,如果Linux文件需要提升的权限,您无法使用Windows程序访问它。

处理Windows命令的输出

除了启动程序与WSL中的文件交互外,您还可以在Linux中处理Windows 10程序的输出。

执行Windows控制台程序后,输出直接在Linux中而不是Windows中加以显示。

然后可以使用awk、sed或sort之类的程序来处理该输出。

举个简单的例子,如果我们想获取按服务名称排序的Windows 10服务列表,可以使用以下命令:

  1. sc.exe query | grep SERVICE_NAME | awk '{print $1=""; print $0}' | sort -bf| sed '/^$/d' 

图2. 通过Linux命令管道输出SC.exe

该功能还让您可以将Windows应用程序用作复杂的Linux外壳脚本的一部分。

这些外壳脚本可用于检查进程、监测文件更改、基于Windows 10进程的输出执行命令以及执行许多其他任务。

虽然您可以找到大多数Linux程序的Windows对应版本,但如果使用WSL混合搭配这两种环境,您将获得两全其美的效果。

该功能让您可以使用在任何一种环境中用起来最擅长的工具。

原文标题:How to run Windows 10 programs in a WSL Linux shell,作者:Lawrence Abrams

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】