借助適用于Linux的Windows子系統(WSL),您可以直接在Linux Shell中運行Windows 10程序,從而減少Windows與Linux之間的差距。
WSL的優(yōu)勢之一是,您不僅可以在Windows 10中運行Linux發(fā)行版,還可以靈活地在Linux中運行Windows 10程序。
這一功能使Linux可以控制Windows的諸多方面,或者使Windows程序能夠與WSL文件系統或Linux命令處理的輸出進行交互。
它還讓WSL用戶可以創(chuàng)建影響Linux發(fā)行版的復雜外殼腳本,還可以用于在Windows 10中執(zhí)行命令。
如何從WSL Linux啟動Windows 10可執(zhí)行文件?
Windows 10和Linux都使用“PATH”變量,該變量含有您在執(zhí)行程序時搜索的文件夾列表。
如果您嘗試運行某個程序,但在PATH中找不到該程序,Linux和Windows都會告訴您找不到該程序。在這種情況下,您需要使用完整路徑(比如“C:\Notepad2\Notepad.exe”)來啟動程序。
Windows 10啟動WSL發(fā)行版時,它會配置Linux PATH變量,以包含標準的Linux二進制文件夾和常規(guī)的Windows 10路徑。
您可以通過在WSL外殼提示符下鍵入env |grep“ PATH”命令來查看該路徑。
圖1. PATH變量
注意:平常的Windows驅動器號會自動掛載在‘/ mnt / c’或‘/ mnt / d’等下面。
您在WSL外殼中時,只需鍵入全名(包括.exe擴展名),即可執(zhí)行Windows 10程序。
如果執(zhí)行命令時不包括.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程序的輸出。
執(zhí)行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外殼腳本的一部分。
這些外殼腳本可用于檢查進程、監(jiān)測文件更改、基于Windows 10進程的輸出執(zhí)行命令以及執(zhí)行許多其他任務。
雖然您可以找到大多數Linux程序的Windows對應版本,但如果使用WSL混合搭配這兩種環(huán)境,您將獲得兩全其美的效果。
該功能讓您可以使用在任何一種環(huán)境中用起來最擅長的工具。