Kuphatikiza malamulo a Linux mu Windows pogwiritsa ntchito PowerShell ndi WSL
Funso lodziwika bwino kuchokera kwa opanga Windows: "Chifukwa chiyani palibe <ВСТАВЬТЕ ТУТ ЛЮБИМУЮ КОМАНДУ LINUX>?. Kaya ndi swipe yamphamvu less kapena zida zodziwika bwino grep kapena sed, Madivelopa a Windows akufuna kupeza mosavuta malamulowa pa ntchito yawo ya tsiku ndi tsiku.
Windows Subsystem ya Linux (WSL) wapita patsogolo kwambiri pankhaniyi. Zimakuthandizani kuti muyitane malamulo a Linux kuchokera pa Windows powatumizira wsl.exe (i.e. wsl ls). Ngakhale izi ndizowongolera kwambiri, njirayi ili ndi zovuta zingapo.
Njira za Windows pazokangana sizigwira ntchito nthawi zonse chifukwa ma backslash amatanthauziridwa ngati zilembo zothawa m'malo molekanitsa zikwatu.
Njira za Windows pazokangana sizimasuliridwa kumalo okwera omwe ali mu WSL.
Zokonda zokhazikika sizimalemekezedwa mu mbiri ya WSL yokhala ndi ma alias ndi zosintha zachilengedwe.
Kumaliza kwa njira ya Linux sikuthandizidwa.
Kumaliza kwa lamulo sikutheka.
Kumaliza kukangana sikutheka.
Zotsatira zake, malamulo a Linux amatengedwa ngati nzika za kalasi yachiwiri pansi pa Windows-ndipo ndizovuta kugwiritsa ntchito kuposa malamulo achibadwidwe. Kuti mufanane ndi ufulu wawo, m'pofunika kuthetsa mavuto omwe atchulidwa.
PowerShell ntchito wrappers
Ndi PowerShell ntchito wrappers, tikhoza kuwonjezera lamulo kumaliza ndi kuthetsa kufunika prefixes wsl, kumasulira njira za Windows kukhala njira za WSL. Zofunikira za zipolopolo:
Pa lamulo lililonse la Linux payenera kukhala cholembera chimodzi chokhala ndi dzina lomwelo.
Chipolopolocho chiyenera kuzindikira njira za Windows zomwe zadutsa ngati mikangano ndikusintha kukhala njira za WSL.
Chigoba chiyenera kuyimba wsl ndi lamulo loyenera la Linux pakuyika kwa mapaipi aliwonse ndikudutsa mikangano yamtundu uliwonse yoperekedwa ku ntchitoyi.
Popeza chitsanzochi chingagwiritsidwe ntchito pa lamulo lililonse, tikhoza kufotokoza tanthauzo la mapepalawa ndikuwapanga kuchokera pamndandanda wa malamulo oti alowe.
# The commands to import.
$commands = "awk", "emacs", "grep", "head", "less", "ls", "man", "sed", "seq", "ssh", "tail", "vim"
# Register a function for each command.
$commands | ForEach-Object { Invoke-Expression @"
Remove-Alias $_ -Force -ErrorAction Ignore
function global:$_() {
for (`$i = 0; `$i -lt `$args.Count; `$i++) {
# If a path is absolute with a qualifier (e.g. C:), run it through wslpath to map it to the appropriate mount point.
if (Split-Path `$args[`$i] -IsAbsolute -ErrorAction Ignore) {
`$args[`$i] = Format-WslArgument (wsl.exe wslpath (`$args[`$i] -replace "", "/"))
# If a path is relative, the current working directory will be translated to an appropriate mount point, so just format it.
} elseif (Test-Path `$args[`$i] -ErrorAction Ignore) {
`$args[`$i] = Format-WslArgument (`$args[`$i] -replace "", "/")
}
}
if (`$input.MoveNext()) {
`$input.Reset()
`$input | wsl.exe $_ (`$args -split ' ')
} else {
wsl.exe $_ (`$args -split ' ')
}
}
"@
}
mndandanda $command imatanthauzira malamulo otengera katundu. Kenako timapanga chopukutira ntchito kwa aliyense wa iwo pogwiritsa ntchito lamulo Invoke-Expression (poyamba kuchotsa zilembo zilizonse zomwe zingasemphane ndi ntchitoyi).
Ntchitoyi imabwereza pamakangano a mzere wa malamulo, imasankha njira za Windows pogwiritsa ntchito malamulo Split-Path и Test-Pathndikusintha njira izi kukhala njira za WSL. Timayendetsa njira kudzera mu ntchito yothandizira Format-WslArgument, zomwe tidzafotokoza pambuyo pake. Imathawa zilembo zapadera monga mipata ndi mabatani omwe angatanthauziridwe molakwika.
Pomaliza, timapereka wsl kulowetsa mapaipi ndi mikangano iliyonse yamalamulo.
Ndi ma wrappers awa mutha kuyitanitsa malamulo omwe mumakonda a Linux mwanjira yachilengedwe popanda kuwonjezera chilembo wsl ndipo popanda kudandaula za momwe njirazo zimasinthira:
man bash
less -i $profile.CurrentUserAllHosts
ls -Al C:Windows | less
grep -Ein error *.log
tail -f *.log
Malamulo oyambira akuwonetsedwa apa, koma mutha kupanga chipolopolo cha lamulo lililonse la Linux mwa kungowonjezera pamndandanda. Ngati muwonjezera code iyi ku yanu mbiri PowerShell, malamulo awa azipezeka kwa inu mu gawo lililonse la PowerShell, monga malamulo achibadwidwe!
Zokonda Zofikira
Mu Linux, ndizofala kutanthauzira zilembo ndi/kapena zosintha zamalo muzambiri zolowera, kuyika magawo osakhazikika pamalamulo omwe amagwiritsidwa ntchito pafupipafupi (mwachitsanzo, alias ls=ls -AFh kapena export LESS=-i). Kuyipa kumodzi kokhala ngati proxy kudzera mu chipolopolo chosalumikizana wsl.exe - kuti mbiriyo siidakwezedwe, kotero zosankhazi sizipezeka mwachisawawa (ie. ls mu WSL ndi wsl ls adzachita mosiyana ndi dzina lomwe lafotokozedwa pamwambapa).
PowerShell imapereka $PSDefaultParameterValues, makina okhazikika ofotokozera magawo osasinthika, koma a cmdlets ndi ntchito zapamwamba. Zachidziwikire, titha kupanga ntchito zapamwamba kuchokera ku zipolopolo zathu, koma izi zimabweretsa zovuta zosafunikira (mwachitsanzo, PowerShell imagwirizanitsa mayina a parameter (mwachitsanzo, -a zimagwirizana ndi -ArgumentList), zomwe zingasemphane ndi malamulo a Linux omwe amatenga mayina pang'ono ngati mikangano), ndipo mawu ofotokozera zachikhalidwe sangakhale oyenera kwambiri (zosakhazikika zimafuna dzina lachidziwitso pakiyi, osati dzina la lamulo) .
Komabe, ndi kusinthidwa pang'ono kwa zipolopolo zathu, titha kugwiritsa ntchito chitsanzo chofanana ndi $PSDefaultParameterValues, ndikuthandizira zosankha zosasinthika zamalamulo a Linux!
Kuphatikiza apo, popeza tsopano tili ndi bash autocompletion, mutha kumaliza njira za Linux mwachindunji mu PowerShell!
less /etc/<TAB>
ls /usr/share/<TAB>
vim ~/.bash<TAB>
Munthawi yomwe kukwaniritsidwa kwa bash sikutulutsa zotsatira, PowerShell imabwerera kumayendedwe a Windows osasintha. Chifukwa chake, pochita, mutha kugwiritsa ntchito njira ziwiri nthawi imodzi mwakufuna kwanu.
Pomaliza
Pogwiritsa ntchito PowerShell ndi WSL, titha kuphatikiza malamulo a Linux mu Windows ngati mapulogalamu achilengedwe. Palibe chifukwa chofufuzira zomanga za Win32 kapena zida za Linux kapena kusokoneza mayendedwe anu popita ku chipolopolo cha Linux. Basi kukhazikitsa WSL, konza Mbiri ya PowerShell и tchulani malamulo omwe mukufuna kuitanitsa! Kukonzekera kolemera kwa Linux ndi Windows command parameters ndi njira zamafayilo ndizochita zomwe sizikupezeka m'malamulo a Windows masiku ano.
Ndi malamulo ati a Linux omwe mumawona kuti ndi othandiza kwambiri? Ndi zinthu zina ziti zomwe zimasowa mukamagwira ntchito mu Windows? Lembani mu ndemanga kapena pa GitHub!