借助适用于Linux的Windows子系统(WSL),您可以直接在Linux Shell中运行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源文件,应输入以下命令:
notepad.exe test.php
该命令将让您可以使用记事本而不是普通的Linux文本编辑器来编辑Linux文件。
如果您想启动不在PATH中的程序,需要指定完整文件名。
比如说,如果您想使用7Zip来存档文件夹,但是该文件夹不在路径中,您可以使用以下命令:
“/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服务列表,可以使用以下命令:
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混合搭配这两种环境,您将获得两全其美的效果。
该功能让您可以使用在任何一种环境中用起来最擅长的工具。