在WSL Linux外殼中運(yùn)行Windows10程序
借助適用于Linux的Windows子系統(tǒng)(WSL),您可以直接在Linux Shell中運(yùn)行Windows 10程序,從而減少Windows與Linux之間的差距。
WSL的優(yōu)勢(shì)之一是,您不僅可以在Windows 10中運(yùn)行Linux發(fā)行版,還可以靈活地在Linux中運(yùn)行Windows 10程序。
這一功能使Linux可以控制Windows的諸多方面,或者使Windows程序能夠與WSL文件系統(tǒng)或Linux命令處理的輸出進(jìn)行交互。
它還讓W(xué)SL用戶可以創(chuàng)建影響Linux發(fā)行版的復(fù)雜外殼腳本,還可以用于在Windows 10中執(zhí)行命令。
如何從WSL Linux啟動(dòng)Windows 10可執(zhí)行文件?
Windows 10和Linux都使用“PATH”變量,該變量含有您在執(zhí)行程序時(shí)搜索的文件夾列表。
如果您嘗試運(yùn)行某個(gè)程序,但在PATH中找不到該程序,Linux和Windows都會(huì)告訴您找不到該程序。在這種情況下,您需要使用完整路徑(比如“C:\Notepad2\Notepad.exe”)來(lái)啟動(dòng)程序。
Windows 10啟動(dòng)WSL發(fā)行版時(shí),它會(huì)配置Linux PATH變量,以包含標(biāo)準(zhǔn)的Linux二進(jìn)制文件夾和常規(guī)的Windows 10路徑。
您可以通過(guò)在WSL外殼提示符下鍵入env |grep“ PATH”命令來(lái)查看該路徑。
圖1. PATH變量
注意:平常的Windows驅(qū)動(dòng)器號(hào)會(huì)自動(dòng)掛載在‘/ mnt / c’或‘/ mnt / d’等下面。
您在WSL外殼中時(shí),只需鍵入全名(包括.exe擴(kuò)展名),即可執(zhí)行Windows 10程序。
如果執(zhí)行命令時(shí)不包括.exe擴(kuò)展名,WSL會(huì)認(rèn)為它是Linux命令。
比如說(shuō),如果您想啟動(dòng)Windows記事本來(lái)編輯PHP源文件,應(yīng)輸入以下命令:
notepad.exe test.php
該命令將讓您可以使用記事本而不是普通的Linux文本編輯器來(lái)編輯Linux文件。
如果您想啟動(dòng)不在PATH中的程序,需要指定完整文件名。
比如說(shuō),如果您想使用7Zip來(lái)存檔文件夾,但是該文件夾不在路徑中,您可以使用以下命令:
"/mnt/c/program files/7-zip/7z.exe" a -tzip code.zip code/
請(qǐng)注意,由于“program files”含有空格,因此我們不得不將7z.exe命令括在引號(hào)中。
應(yīng)注意的是,您將無(wú)法在WSL中啟動(dòng)需要管理員權(quán)限的Windows 10程序。同樣,如果Linux文件需要提升的權(quán)限,您無(wú)法使用Windows程序訪問它。
處理Windows命令的輸出
除了啟動(dòng)程序與WSL中的文件交互外,您還可以在Linux中處理Windows 10程序的輸出。
執(zhí)行Windows控制臺(tái)程序后,輸出直接在Linux中而不是Windows中加以顯示。
然后可以使用awk、sed或sort之類的程序來(lái)處理該輸出。
舉個(gè)簡(jiǎn)單的例子,如果我們想獲取按服務(wù)名稱排序的Windows 10服務(wù)列表,可以使用以下命令:
sc.exe query | grep SERVICE_NAME | awk '{print $1=""; print $0}' | sort -bf| sed '/^$/d'
圖2. 通過(guò)Linux命令管道輸出SC.exe
該功能還讓您可以將Windows應(yīng)用程序用作復(fù)雜的Linux外殼腳本的一部分。
這些外殼腳本可用于檢查進(jìn)程、監(jiān)測(cè)文件更改、基于Windows 10進(jìn)程的輸出執(zhí)行命令以及執(zhí)行許多其他任務(wù)。
雖然您可以找到大多數(shù)Linux程序的Windows對(duì)應(yīng)版本,但如果使用WSL混合搭配這兩種環(huán)境,您將獲得兩全其美的效果。
該功能讓您可以使用在任何一種環(huán)境中用起來(lái)最擅長(zhǎng)的工具。