如何在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源文件,應輸入以下命令:
- 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混合搭配這兩種環境,您將獲得兩全其美的效果。
該功能讓您可以使用在任何一種環境中用起來最擅長的工具。
原文標題:How to run Windows 10 programs in a WSL Linux shell,作者:Lawrence Abrams
【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】