เชตเชฟเชจเซเชกเซเช เชกเซเชตเชฒเชชเชฐเซเชธ เชคเชฐเชซเชฅเซ เชเช เชธเชพเชฎเชพเชจเซเชฏ เชชเซเชฐเชถเซเชจ: โเชนเชเซ เชชเชฃ เชเซเชฎ เชจเชฅเซ <ะะกะขะะะฌะขะ ะขะฃะข ะะฎะะะะฃะฎ ะะะะะะะฃ LINUX>
?. เชญเชฒเซ เชคเซ เชถเชเซเชคเชฟเชถเชพเชณเซ เชธเซเชตเชพเชเชช เชนเซเชฏ less
เช
เชฅเชตเชพ เชชเชฐเชฟเชเชฟเชค เชธเชพเชงเชจเซ grep
เช
เชฅเชตเชพ sed
, เชตเชฟเชจเซเชกเซเช เชกเซเชตเชฒเชชเชฐเซเชธ เชคเซเชฎเชจเชพ เชฐเซเชเชฟเชเชฆเชพ เชเชพเชฎเชฎเชพเช เช เชเชฆเซเชถเซเชจเซ เชธเชฐเชณ เชเชเซเชธเซเชธ เชเชเซเชเซ เชเซ.
wsl.exe
(เชฆเชพ.เชค., wsl ls
). เชเซ เชเซ เช เชเช เชจเซเชเชงเชชเชพเชคเซเชฐ เชธเซเชงเชพเชฐเซ เชเซ, เช เชตเชฟเชเชฒเซเชช เชธเชเชเซเชฏเชพเชฌเชเชง เชเซเชฐเชซเชพเชฏเชฆเชพเชฅเซ เชชเซเชกเชพเชฏ เชเซ.
- เชธเชฐเซเชตเชตเซเชฏเชพเชชเช เชเชฎเซเชฐเซ
wsl
เชเชเชเชพเชณเชพเชเชจเช เช เชจเซ เช เชเซเชฆเชฐเชคเซ. - เชฆเชฒเซเชฒเซเชฎเชพเช เชตเชฟเชจเซเชกเซเช เชชเชพเชฅ เชนเชเชฎเซเชถเชพ เชเชพเชฎ เชเชฐเชคเชพ เชจเชฅเซ เชเชพเชฐเชฃ เชเซ เชฌเซเชเชธเซเชฒเซเชถเชจเซ เชกเชฟเชฐเซเชเซเชเชฐเซ เชตเชฟเชญเชพเชเชเชจเซ เชฌเชฆเชฒเซ เชเชธเซเชเซเชช เชเซเชฐเซเชเซเชเชฐ เชคเชฐเซเชเซ เช เชฐเซเชฅเชเชเชจ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ.
- เชฆเชฒเซเชฒเซเชฎเชพเชเชจเชพ เชตเชฟเชจเซเชกเซเช เชชเชพเชฅ WSL เชฎเชพเช เช เชจเซเชฐเซเชช เชฎเชพเชเชจเซเช เชชเซเชเชจเซเชเชฎเชพเช เช เชจเซเชตเชพเชฆเชฟเชค เชฅเชคเชพ เชจเชฅเซ.
- เชเชชเชจเชพเชฎเซ เช เชจเซ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชเชฒเซ เชธเชพเชฅเซ WSL เชชเซเชฐเซเชซเชพเชเชฒเซเชธเชฎเชพเช เชกเชฟเชซเซเชฒเซเช เชธเซเชเชฟเชเชเซเชธเชจเซ เชฎเชพเชจ เชเชชเชตเชพเชฎเชพเช เชเชตเชคเซเช เชจเชฅเซ.
- Linux เชชเชพเชฅ เชชเซเชฐเซเชฃเชคเชพเชจเซ เชธเชฎเชฐเซเชฅเชจ เชจเชฅเซ.
- เชเชฆเซเชถ เชชเซเชฐเซเชฃเชคเชพ เชธเชชเซเชฐเซเชเซเชก เชจเชฅเซ.
- เชฆเชฒเซเชฒ เชชเซเชฐเซเชฃเชคเชพเชจเซ เชธเชฎเชฐเซเชฅเชจ เชจเชฅเซ.
เชชเชฐเชฟเชฃเชพเชฎเซ, Linux เชเชฆเซเชถเซเชจเซ เชตเชฟเชจเซเชกเซเช เชนเซเช เชณ เชฌเซเชเชพ-เชตเชฐเซเชเชจเชพ เชจเชพเชเชฐเชฟเชเซเชจเซ เชเซเชฎ เชเชฃเชตเชพเชฎเชพเช เชเชตเซ เชเซ - เช เชจเซ เชฎเซเชณ เชเชฆเซเชถเซ เชเชฐเชคเชพเช เชคเซเชจเซ เชเชชเชฏเซเช เชเชฐเชตเซ เชตเชงเซ เชฎเซเชถเซเชเซเชฒ เชเซ. เชคเซเชฎเชจเชพ เช เชงเชฟเชเชพเชฐเซเชจเซ เชธเชฎเชพเชจ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชเซ, เชธเซเชเชฟเชฌเชฆเซเชง เชธเชฎเชธเซเชฏเชพเช เชนเชฒ เชเชฐเชตเซ เชเชฐเซเชฐเซ เชเซ.
เชชเชพเชตเชฐเชถเซเชฒ เชซเชเชเซเชถเชจ เชฐเซเชชเชฐเซเชธ
เชชเชพเชตเชฐเชถเซเชฒ เชซเชเชเซเชถเชจ เชฐเซเชชเชฐ เชธเชพเชฅเซ, เช
เชฎเซ เชเชฎเชพเชจเซเชก เชเชฎเซเชชเซเชฒเซเชถเชจ เชเชฎเซเชฐเซ เชถเชเซเช เชเซเช เช
เชจเซ เชเชชเชธเชฐเซเชเชจเซ เชเชฐเซเชฐเชฟเชฏเชพเชคเชจเซ เชฆเซเชฐ เชเชฐเซ เชถเชเซเช เชเซเช wsl
, WSL เชชเชพเชฅเชฎเชพเช เชตเชฟเชจเซเชกเซเช เชชเชพเชฅเชจเซเช เชญเชพเชทเชพเชเชคเชฐ. เชถเซเชฒ เชฎเชพเชเซ เชฎเซเชณเชญเซเชค เชเชตเชถเซเชฏเชเชคเชพเช:
- เชฆเชฐเซเช Linux เชเชฆเซเชถ เชฎเชพเชเซ เชธเชฎเชพเชจ เชจเชพเชฎ เชธเชพเชฅเซ เชเช เชซเชเชเซเชถเชจ เชฐเซเชชเชฐ เชนเซเชตเซเช เชเชตเชถเซเชฏเช เชเซ.
- เชถเซเชฒเซ เชฆเชฒเซเชฒเซ เชคเชฐเซเชเซ เชชเชธเชพเชฐ เชเชฐเซเชฒเชพ Windows เชชเชพเชฅเชจเซ เชเชณเชเชตเชพ เชเซเชเช เช เชจเซ เชคเซเชฎเชจเซ WSL เชชเชพเชฅเชฎเชพเช เชเชจเซเชตเชฐเซเช เชเชฐเชตเชพ เชเซเชเช.
- เชถเซเชฒ เชเซเชฒ เชเชฐเชตเซ เชเซเชเช
wsl
เชเซเชเชชเชฃ เชชเชพเชเชชเชฒเชพเชเชจ เชเชจเชชเซเช เชฎเชพเชเซ เชฏเซเชเซเชฏ Linux เชเชฆเซเชถ เชธเชพเชฅเซ เช เชจเซ เชซเชเชเซเชถเชจเชฎเชพเช เชชเชธเชพเชฐ เชฅเชฏเซเชฒ เชเซเชเชชเชฃ เชเชฆเซเชถ เชตเชพเชเซเชฏ เชฆเชฒเซเชฒเซ เชชเชธเชพเชฐ เชเชฐเซ.
เช เชชเซเชเชฐเซเชจ เชเซเชเชชเชฃ เชเชฆเซเชถ เชชเชฐ เชฒเชพเชเซ เชเชฐเซ เชถเชเชพเชฏ เชเซ, เชคเซเชฅเซ เช เชฎเซ เช เชฐเซเชชเชฐเซเชธเชจเซ เชตเซเชฏเชพเชเซเชฏเชพเชจเซ เช เชฎเซเชฐเซเชค เชเชฐเซ เชถเชเซเช เชเซเช เช เชจเซ เชคเซเชฎเชจเซ เชเชฏเชพเชค เชเชฐเชตเชพ เชฎเชพเชเซเชจเชพ เชเชฆเซเชถเซเชจเซ เชธเซเชเชฟเชฎเชพเชเชฅเซ เชเชคเชฟเชถเซเชฒ เชฐเซเชคเซ เชเชจเชฐเซเช เชเชฐเซ เชถเชเซเช เชเซเช.
# 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 ' ')
}
}
"@
}
เชฏเชพเชฆเซ $command
เชเชฏเชพเชค เชเชฆเซเชถเซ เชตเซเชฏเชพเชเซเชฏเชพเชฏเชฟเชค เชเชฐเซ เชเซ. เช
เชฎเซ เชชเชเซ เชเชฆเซเชถเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชคเซ เชฆเชฐเซเช เชฎเชพเชเซ เชเชคเชฟเชถเซเชฒ เชฐเซเชคเซ เชซเชเชเซเชถเชจ เชฐเซเชชเชฐ เชเชจเชฐเซเช เชเชฐเซเช เชเซเช Invoke-Expression
(เชชเซเชฐเชฅเชฎ เชเซเชเชชเชฃ เชเชชเชจเชพเชฎเซเชจเซ เชฆเซเชฐ เชเชฐเซเชจเซ เชเซ เชเชพเชฐเซเชฏ เชธเชพเชฅเซ เชตเชฟเชฐเซเชงเชพเชญเชพเชธเซ เชนเซเชฏ).
เชซเชเชเซเชถเชจ เชเชฆเซเชถ เชตเชพเชเซเชฏ เชฆเชฒเซเชฒเซ เชชเชฐ เชชเซเชจเชฐเชพเชตเชฐเซเชคเชฟเชค เชฅเชพเชฏ เชเซ, เชเชฆเซเชถเซเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชตเชฟเชจเซเชกเซเช เชชเชพเชฅ เชจเชเซเชเซ เชเชฐเซ เชเซ Split-Path
ะธ Test-Path
เช
เชจเซ เชชเชเซ เช เชชเชพเชฅเชจเซ WSL เชชเชพเชฅเชฎเชพเช เชซเซเชฐเชตเซ เชเซ. เช
เชฎเซ เชนเซเชฒเซเชชเชฐ เชซเชเชเซเชถเชจ เชฆเซเชตเชพเชฐเชพ เชชเชพเชฅ เชเชฒเชพเชตเซเช เชเซเช Format-WslArgument
, เชเซเชจเซ เชเชชเชฃเซ เชชเชเซเชฅเซ เชตเซเชฏเชพเชเซเชฏเชพเชฏเชฟเชค เชเชฐเซเชถเซเช. เชคเซ เชเชเซเชฏเชพเช เช
เชจเซ เชเซเชเชธ เชเซเชตเชพ เชตเชฟเชถเชฟเชทเซเช เช
เชเซเชทเชฐเซเชฅเซ เชฌเชเซ เชเชพเชฏ เชเซ เชเซเชจเซ เช
เชจเซเชฏเชฅเชพ เชเซเชเซ เช
เชฐเซเชฅเชเชเชจ เชเชฐเชตเชพเชฎเชพเช เชเชตเชถเซ.
เชเซเชฒเซเชฒเซ, เช
เชฎเซ เช
เชญเชฟเชตเซเชฏเชเซเชค เชเชฐเซเช เชเซเช wsl
เชชเชพเชเชชเชฒเชพเชเชจ เชเชจเชชเซเช เช
เชจเซ เชเซเชเชชเชฃ เชเชฆเซเชถ เชตเชพเชเซเชฏ เชฆเชฒเซเชฒเซ.
เช เชฐเซเชชเชฐเซเชธ เชธเชพเชฅเซ เชคเชฎเซ เชคเชฎเชพเชฐเชพ เชฎเชจเชชเชธเชเชฆ Linux เชเชฆเซเชถเซเชจเซ เชเชชเชธเชฐเซเช เชเชฎเซเชฐเซเชฏเชพ เชตเชฟเชจเชพ เชตเชงเซ เชเซเชฆเชฐเชคเซ เชฐเซเชคเซ เชเซเชฒ เชเชฐเซ เชถเชเซ เชเซ wsl
เช
เชจเซ เชชเชพเชฅ เชเซเชตเซ เชฐเซเชคเซ เชฐเซเชชเชพเชเชคเชฐเชฟเชค เชฅเชพเชฏ เชเซ เชคเซเชจเซ เชเชฟเชเชคเชพ เชเชฐเซเชฏเชพ เชตเชฟเชจเชพ:
man bash
less -i $profile.CurrentUserAllHosts
ls -Al C:Windows | less
grep -Ein error *.log
tail -f *.log
เชเชฆเซเชถเซเชจเซ เชฎเซเชณเชญเซเชค เชธเชฎเซเชน เช
เชนเซเช เชฌเชคเชพเชตเชตเชพเชฎเชพเช เชเชตเซเชฏเซ เชเซ, เชชเชฐเชเชคเซ เชคเชฎเซ เชเซเชเชชเชฃ Linux เชเชฆเซเชถ เชฎเชพเชเซ เชคเซเชจเซ เชซเชเซเชค เชธเซเชเชฟเชฎเชพเช เชเชฎเซเชฐเซเชจเซ เชถเซเชฒ เชฌเชจเชพเชตเซ เชถเชเซ เชเซ. เชเซ เชคเชฎเซ เช เชเซเชก เชคเชฎเชพเชฐเชพเชฎเชพเช เชเชฎเซเชฐเซ เชเซ
เชฎเซเชณเชญเซเชค เชธเซเชฏเซเชเชจเซ
เชฒเชฟเชจเชเซเชธเชฎเชพเช, เชฒเซเชเชฟเชจ เชชเซเชฐเซเชซเชพเชเชฒเซเชธเชฎเชพเช เชเชชเชจเชพเชฎเซ เช
เชจเซ/เช
เชฅเชตเชพ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชเชฒเซเชจเซ เชตเซเชฏเชพเชเซเชฏเชพเชฏเชฟเชค เชเชฐเชตเซเช เชธเชพเชฎเชพเชจเซเชฏ เชเซ, เชตเชพเชฐเชเชตเชพเชฐ เชเชชเชฏเซเชเชฎเชพเช เชฒเซเชตเชพเชคเชพ เชเชฆเซเชถเซ เชฎเชพเชเซ เชกเชฟเชซเซเชฒเซเช เชชเชฐเชฟเชฎเชพเชฃเซ เชธเซเช เชเชฐเชตเชพ (เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, alias ls=ls -AFh
เช
เชฅเชตเชพ export LESS=-i
). เชฌเชฟเชจ-เชเชจเซเชเชฐเซเชเซเชเชฟเชต เชถเซเชฒ เชฆเซเชตเชพเชฐเชพ เชชเซเชฐเซเชเซเชธเซ เชเชฐเชตเชพเชจเซ เชเช เชเซเชฐเชซเชพเชฏเชฆเซ wsl.exe
- เชเซ เชชเซเชฐเซเชซเชพเชเชฒเซเชธ เชฒเซเชก เชฅเชฏเซเชฒ เชจเชฅเซ, เชคเซเชฅเซ เช เชตเชฟเชเชฒเซเชชเซ เชฎเซเชณเชญเซเชค เชฐเซเชคเซ เชเชชเชฒเชฌเซเชง เชจเชฅเซ (เชฆเชพ.เชค. ls
WSL เชฎเชพเช เช
เชจเซ wsl ls
เชเชชเชฐ เชตเซเชฏเชพเชเซเชฏเชพเชฏเชฟเชค เชเชชเชจเชพเชฎ เชธเชพเชฅเซ เช
เชฒเช เชฐเซเชคเซ เชตเชฐเซเชคเซ เชเซ).
เชชเชพเชตเชฐเชถเซเชฒ เชชเซเชฐเชฆเชพเชจ เชเชฐเซ เชเซ -a
เชธเชพเชฅเซ เชธเชเชฌเชเชง เชงเชฐเชพเชตเซ เชเซ -ArgumentList
), เชเซ เชฒเชฟเชจเชเซเชธ เชเชฆเซเชถเซ เชธเชพเชฅเซ เชตเชฟเชฐเซเชงเชพเชญเชพเชธ เชเชฐเชถเซ เชเซ เชฆเชฒเซเชฒเซ เชคเชฐเซเชเซ เชเชเชถเชฟเช เชจเชพเชฎเซ เชฒเซ เชเซ), เช
เชจเซ เชกเชฟเชซเซเชฒเซเช เชฎเซเชฒเซเชฏเซเชจเซ เชตเซเชฏเชพเชเซเชฏเชพเชฏเชฟเชค เชเชฐเชตเชพ เชฎเชพเชเซเชจเซเช เชตเชพเชเซเชฏเชฐเชเชจเชพ เชธเซเชฅเซ เชฏเซเชเซเชฏ เชฐเชนเซเชถเซ เชจเชนเซเช (เชกเชฟเชซเซเชฒเซเช เชฆเชฒเซเชฒเซเชจเซ เชเซเชฎเชพเช เชชเซเชฐเชพเชฎเซเชเชฐเชจเซเช เชจเชพเชฎ เชเชฐเซเชฐเซ เชเซ, เชฎเชพเชคเซเชฐ เชเชฆเซเชถเชจเซเช เชจเชพเชฎ เชจเชนเซเช) .
เชเซ เชเซ, เช
เชฎเชพเชฐเชพ เชถเซเชฒเซเชธเชฎเชพเช เชฅเซเชกเซ เชซเซเชฐเชซเชพเชฐ เชเชฐเซเชจเซ, เช
เชฎเซ เชธเชฎเชพเชจ เชฎเซเชกเซเชฒเชจเซ เช
เชฎเชฒเชฎเชพเช เชฎเซเชเซ เชถเชเซเช เชเซเช $PSDefaultParameterValues
, เช
เชจเซ Linux เชเชฆเซเชถเซ เชฎเชพเชเซ เชกเชฟเชซเซเชฒเซเช เชตเชฟเชเชฒเซเชชเซเชจเซ เชธเชเซเชทเชฎ เชเชฐเซ!
function global:$_() {
โฆ
`$defaultArgs = ((`$WslDefaultParameterValues.$_ -split ' '), "")[`$WslDefaultParameterValues.Disabled -eq `$true]
if (`$input.MoveNext()) {
`$input.Reset()
`$input | wsl.exe $_ `$defaultArgs (`$args -split ' ')
} else {
wsl.exe $_ `$defaultArgs (`$args -split ' ')
}
}
เชชเชธเชพเชฐ เชฅเชพเชฏ เชเซ $WslDefaultParameterValues
เชเชฆเซเชถ เชตเชพเชเซเชฏ เชชเชฐ, เช
เชฎเซ เชชเชฐเชฟเชฎเชพเชฃเซ เชฎเชพเชฐเชซเชคเซ เชฎเซเชเชฒเซเช เชเซเช wsl.exe
. เชจเซเชเซ เชเชชเซเชฒ เชฌเชคเชพเชตเซ เชเซ เชเซ เชกเชฟเชซเซเชฒเซเช เชธเซเชเชฟเชเชเซเชธเชจเซ เชเซเช เชตเชตเชพ เชฎเชพเชเซ เชคเชฎเชพเชฐเซ เชชเชพเชตเชฐเชถเซเชฒ เชชเซเชฐเซเชซเชพเชเชฒเชฎเชพเช เชธเซเชเชจเชพเช เชเซเชตเซ เชฐเซเชคเซ เชเชฎเซเชฐเชตเซ. เชนเชตเซ เช
เชฎเซ เชคเซ เชเชฐเซ เชถเชเซเช เชเซเช!
$WslDefaultParameterValues["grep"] = "-E"
$WslDefaultParameterValues["less"] = "-i"
$WslDefaultParameterValues["ls"] = "-AFh --group-directories-first"
เชเชพเชฐเชฃ เชเซ เชชเชฐเชฟเชฎเชพเชฃเซ เชชเชเซ เชฎเซเชกเซเชฒ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ $PSDefaultParameterValues
, เชคเชฎเซ เชเชฐเซ เชถเชเซ เชเซ "Disabled"
เช
เชฐเซเชฅเชฎเชพเช $true
. เช
เชฒเช เชนเซเชถ เชเซเชฌเชฒเชจเซ เชตเชงเชพเชฐเชพเชจเซ เชซเชพเชฏเชฆเซ เช เช
เชเซเชทเชฎ เชเชฐเชตเชพเชจเซ เชเซเชทเชฎเชคเชพ เชเซ $WslDefaultParameterValues
เชฅเซ เช
เชฒเช $PSDefaultParameterValues
.
เชฆเชฒเซเชฒ เชชเซเชฐเซเชฃ
เชชเชพเชตเชฐเชถเซเชฒ เชคเชฎเชจเซ เชเชฆเซเชถเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชฆเชฒเซเชฒ เชเซเชฐเซเชฒเชฐเซเชธเชจเซ เชจเซเชเชงเชฃเซ เชเชฐเชตเชพเชจเซ เชฎเชเชเซเชฐเซ เชเชชเซ เชเซ Register-ArgumentCompleter
. เชฌเชพเชถ เชถเชเซเชคเชฟเชถเชพเชณเซ เชเซ
# Register an ArgumentCompleter that shims bash's programmable completion.
Register-ArgumentCompleter -CommandName $commands -ScriptBlock {
param($wordToComplete, $commandAst, $cursorPosition)
# Map the command to the appropriate bash completion function.
$F = switch ($commandAst.CommandElements[0].Value) {
{$_ -in "awk", "grep", "head", "less", "ls", "sed", "seq", "tail"} {
"_longopt"
break
}
"man" {
"_man"
break
}
"ssh" {
"_ssh"
break
}
Default {
"_minimal"
break
}
}
# Populate bash programmable completion variables.
$COMP_LINE = "`"$commandAst`""
$COMP_WORDS = "('$($commandAst.CommandElements.Extent.Text -join "' '")')" -replace "''", "'"
for ($i = 1; $i -lt $commandAst.CommandElements.Count; $i++) {
$extent = $commandAst.CommandElements[$i].Extent
if ($cursorPosition -lt $extent.EndColumnNumber) {
# The cursor is in the middle of a word to complete.
$previousWord = $commandAst.CommandElements[$i - 1].Extent.Text
$COMP_CWORD = $i
break
} elseif ($cursorPosition -eq $extent.EndColumnNumber) {
# The cursor is immediately after the current word.
$previousWord = $extent.Text
$COMP_CWORD = $i + 1
break
} elseif ($cursorPosition -lt $extent.StartColumnNumber) {
# The cursor is within whitespace between the previous and current words.
$previousWord = $commandAst.CommandElements[$i - 1].Extent.Text
$COMP_CWORD = $i
break
} elseif ($i -eq $commandAst.CommandElements.Count - 1 -and $cursorPosition -gt $extent.EndColumnNumber) {
# The cursor is within whitespace at the end of the line.
$previousWord = $extent.Text
$COMP_CWORD = $i + 1
break
}
}
# Repopulate bash programmable completion variables for scenarios like '/mnt/c/Program Files'/<TAB> where <TAB> should continue completing the quoted path.
$currentExtent = $commandAst.CommandElements[$COMP_CWORD].Extent
$previousExtent = $commandAst.CommandElements[$COMP_CWORD - 1].Extent
if ($currentExtent.Text -like "/*" -and $currentExtent.StartColumnNumber -eq $previousExtent.EndColumnNumber) {
$COMP_LINE = $COMP_LINE -replace "$($previousExtent.Text)$($currentExtent.Text)", $wordToComplete
$COMP_WORDS = $COMP_WORDS -replace "$($previousExtent.Text) '$($currentExtent.Text)'", $wordToComplete
$previousWord = $commandAst.CommandElements[$COMP_CWORD - 2].Extent.Text
$COMP_CWORD -= 1
}
# Build the command to pass to WSL.
$command = $commandAst.CommandElements[0].Value
$bashCompletion = ". /usr/share/bash-completion/bash_completion 2> /dev/null"
$commandCompletion = ". /usr/share/bash-completion/completions/$command 2> /dev/null"
$COMPINPUT = "COMP_LINE=$COMP_LINE; COMP_WORDS=$COMP_WORDS; COMP_CWORD=$COMP_CWORD; COMP_POINT=$cursorPosition"
$COMPGEN = "bind `"set completion-ignore-case on`" 2> /dev/null; $F `"$command`" `"$wordToComplete`" `"$previousWord`" 2> /dev/null"
$COMPREPLY = "IFS=`$'n'; echo `"`${COMPREPLY[*]}`""
$commandLine = "$bashCompletion; $commandCompletion; $COMPINPUT; $COMPGEN; $COMPREPLY" -split ' '
# Invoke bash completion and return CompletionResults.
$previousCompletionText = ""
(wsl.exe $commandLine) -split 'n' |
Sort-Object -Unique -CaseSensitive |
ForEach-Object {
if ($wordToComplete -match "(.*=).*") {
$completionText = Format-WslArgument ($Matches[1] + $_) $true
$listItemText = $_
} else {
$completionText = Format-WslArgument $_ $true
$listItemText = $completionText
}
if ($completionText -eq $previousCompletionText) {
# Differentiate completions that differ only by case otherwise PowerShell will view them as duplicate.
$listItemText += ' '
}
$previousCompletionText = $completionText
[System.Management.Automation.CompletionResult]::new($completionText, $listItemText, 'ParameterName', $completionText)
}
}
# Helper function to escape characters in arguments passed to WSL that would otherwise be misinterpreted.
function global:Format-WslArgument([string]$arg, [bool]$interactive) {
if ($interactive -and $arg.Contains(" ")) {
return "'$arg'"
} else {
return ($arg -replace " ", " ") -replace "([()|])", ('$1', '`$1')[$interactive]
}
}
เชฌเซเชถเชจเชพ เชเซเชเชฒเชพเช เชเชเชคเชฐเชฟเช เชเชพเชฐเซเชฏเซเชจเซ เชธเชฎเชเซเชฏเชพ เชตเชฟเชจเชพ เชเซเชก เชฅเซเชกเซ เชเชพเชข เชเซ, เชชเชฐเชเชคเซ เชฎเซเชณเชญเซเชค เชฐเซเชคเซ เชเชชเชฃเซ เชถเซเช เชเชฐเซเช เชเซเช เชคเซ เชเซ:
- เชธเซเชเชฟ เชชเชธเชพเชฐ เชเชฐเซเชจเซ เช
เชฎเชพเชฐเชพ เชฌเชงเชพ เชซเชเชเซเชถเชจ เชฐเซเชชเชฐ เชฎเชพเชเซ เชฆเชฒเซเชฒ เชชเซเชฐเซเชฃ เชเชฐเชจเชพเชฐเชจเซ เชจเซเชเชงเชฃเซ เชเชฐเชตเซ
$commands
เชชเชฐเชฟเชฎเชพเชฃเชฎเชพเช-CommandName
เชฎเชพเชเซRegister-ArgumentCompleter
. - เช
เชฎเซ เชฆเชฐเซเช เชเชฎเชพเชจเซเชกเชจเซ เชถเซเชฒ เชซเชเชเซเชถเชจ เชธเชพเชฅเซ เชฎเซเชช เชเชฐเซเช เชเซเช เชเซ bash เชธเซเชตเชคเชเชชเซเชฐเซเชฃเชคเชพ เชฎเชพเชเซ เชตเชพเชชเชฐเซ เชเซ (เชธเซเชตเชคเชเชชเซเชฐเซเชฃเชคเชพ เชธเซเชชเชทเซเชเซเชเชฐเชฃเซ เชตเซเชฏเชพเชเซเชฏเชพเชฏเชฟเชค เชเชฐเชตเชพ เชฎเชพเชเซ, bash เชเชชเชฏเซเช เชเชฐเซ เชเซ.
$F
, เชฎเชพเชเซ เชธเชเชเซเชทเซเชชcomplete -F <FUNCTION>
). - PowerShell เชฆเชฒเซเชฒเซ เชฐเซเชชเชพเชเชคเชฐเชฟเชค เชเชฐเซ เชฐเชนเซเชฏเชพ เชเซเช
$wordToComplete
,$commandAst
ะธ$cursorPosition
เชธเซเชชเชทเซเชเซเชเชฐเชฃเซ เช เชจเซเชธเชพเชฐ bash เชจเชพ เชธเซเชตเชคเชเชชเซเชฐเซเชฃ เชเชพเชฐเซเชฏเซ เชฆเซเชตเชพเชฐเชพ เช เชชเซเชเซเชทเชฟเชค เชซเซเชฐเซเชฎเซเชเชฎเชพเชเชชเซเชฐเซเชเซเชฐเชพเชฎเซเชฌเชฒ เชธเซเชตเชคเช-เชชเซเชฐเซเชฃเชคเชพ เชฌเซเชถ - เช
เชฎเซ เชเซเชฐเชพเชจเซเชธเชซเชฐ เชเชฐเชตเชพ เชฎเชพเชเซ เชเชฎเชพเชจเซเชก เชฒเชพเชเชจ เชเชเชชเซเช เชเชฐเซเช เชเซเช
wsl.exe
, เชเซ เชเชพเชคเชฐเซ เชเชฐเซ เชเซ เชเซ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชฏเซเชเซเชฏ เชฐเซเชคเซ เชธเซเช เชฅเชฏเซเช เชเซ, เชฏเซเชเซเชฏ เชธเซเชตเชคเช-เชชเซเชฐเซเชฃ เชเชพเชฐเซเชฏเชจเซ เชเซเชฒ เชเชฐเซ เชเซ, เช เชจเซ เชชเชฐเชฟเชฃเชพเชฎเซเชจเซ เชฒเชพเชเชจ-เชฌเชพเชฏ-เชฒเชพเชเชจ เชซเซเชถเชจเชฎเชพเช เชเชเชเชชเซเช เชเชฐเซ เชเซ. - เชชเชเซ เช
เชฎเซ เชเซเชฒ เชเชฐเซเช เชเซเช
wsl
เชเชฎเชพเชจเซเชก เชฒเชพเชเชจ เชธเชพเชฅเซ, เช เชฎเซ เชฒเชพเชเชจ เชตเชฟเชญเชพเชเช เชฆเซเชตเชพเชฐเชพ เชเชเชเชชเซเชเชจเซ เช เชฒเช เชเชฐเซเช เชเซเช เช เชจเซ เชฆเชฐเซเช เชฎเชพเชเซ เชเชจเชฐเซเช เชเชฐเซเช เชเซเชCompletionResults
, เชคเซเชฎเชจเซ เชธเซเชฐเซเช เชเชฐเซเชจเซ เช เชจเซ เชธเซเชชเซเชธ เช เชจเซ เชเซเชเชธ เชเซเชตเชพ เช เชเซเชทเชฐเซเชจเซ เชฌเชนเชพเชฐ เชเชพเชขเซ เชเซ เชเซ เช เชจเซเชฏเชฅเชพ เชเซเชเซเช เช เชฐเซเชฅเชเชเชจ เชเชฐเชตเชพเชฎเชพเช เชเชตเชถเซ.
เชชเชฐเชฟเชฃเชพเชฎเซ, เช เชฎเชพเชฐเชพ Linux เชเชฎเชพเชจเซเชก เชถเซเชฒเซ bash เชคเชฐเซเชเซ เชฌเชฐเชพเชฌเชฐ เช เช เชธเซเชตเชคเชเชชเซเชฐเซเชฃเชคเชพเชจเซ เชเชชเชฏเซเช เชเชฐเชถเซ! เชฆเชพเชเซเชฒเชพ เชคเชฐเซเชเซ:
ssh -c <TAB> -J <TAB> -m <TAB> -O <TAB> -o <TAB> -Q <TAB> -w <TAB> -b <TAB>
เชฆเชฐเซเช เชธเซเชตเชคเชเชชเซเชฐเซเชฃเชคเชพ เช เชเชพเชเชจเซ เชฆเชฒเซเชฒ เชฎเชพเชเซ เชตเชฟเชถเชฟเชทเซเช เชฎเซเชฒเซเชฏเซ เชชเซเชฐเชพ เชชเชพเชกเซ เชเซ, WSL เชฎเชพเชเชฅเซ เชเชพเชฃเซเชคเชพ เชนเซเชธเซเชเซเชธ เชเซเชตเชพ เชฐเซเชชเชฐเซเชเชพเชเชเชจ เชกเซเชเชพ เชตเชพเชเชเซ เชเซ!
<TAB>
เชชเชฐเชฟเชฎเชพเชฃเซ เชฆเซเชตเชพเชฐเชพ เชเชเซเชฐ เชเชฐเชถเซ. <Ctrl + ะฟัะพะฑะตะป>
เชฌเชงเชพ เชเชชเชฒเชฌเซเชง เชตเชฟเชเชฒเซเชชเซ เชฌเชคเชพเชตเชถเซ.
เชเชชเชฐเชพเชเชค, เช เชฎเชพเชฐเซ เชชเชพเชธเซ เชนเชตเซ เชฌเซเชถ เชเชเซเชเชฎเซเชชเชฒเซเชถเชจ เชนเซเชตเชพเชฅเซ, เชคเชฎเซ เชชเชพเชตเชฐเชถเซเชฒเชฎเชพเช เชธเซเชงเชพ เช Linux เชชเชพเชฅเชจเซ เชธเซเชตเชคเชเชชเซเชฐเซเชฃ เชเชฐเซ เชถเชเซ เชเซ!
less /etc/<TAB>
ls /usr/share/<TAB>
vim ~/.bash<TAB>
เชเชตเชพ เชเชฟเชธเซเชธเชพเชเชฎเชพเช เชเซ เชเซเชฏเชพเช bash เชธเซเชตเชคเชเชชเซเชฐเซเชฃเชคเชพ เชเซเช เชชเชฐเชฟเชฃเชพเชฎ เชฒเชพเชตเชคเซเช เชจเชฅเซ, เชชเชพเชตเชฐเชถเซเชฒ เชธเชฟเชธเซเชเชฎเชจเชพ เชกเชฟเชซเซเชฒเซเช เชตเชฟเชจเซเชกเซเช เชชเชพเชฅ เชชเชฐ เชชเชพเชเชพ เชซเชฐเซ เชเซ. เชเชฎ, เชตเซเชฏเชตเชนเชพเชฐเชฎเชพเช, เชคเชฎเซ เชคเชฎเชพเชฐเชพ เชตเชฟเชตเซเชเชฌเซเชฆเซเชงเชฟเชฅเซ เชฌเชเชจเซ เชฎเชพเชฐเซเชเซเชจเซ เชเชเชธเชพเชฅเซ เชเชชเชฏเซเช เชเชฐเซ เชถเชเซ เชเซ.
เชจเชฟเชทเซเชเชฐเซเชท
PowerShell เช
เชจเซ WSL เชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ, เช
เชฎเซ Linux เชเชฎเชพเชจเซเชกเชจเซ เชตเชฟเชจเซเชกเซเชเชฎเชพเช เชจเซเชเซเชต เชเชชเซเชฒเชฟเชเซเชถเชจ เชคเชฐเซเชเซ เชเชเซเชเซเชค เชเชฐเซ เชถเชเซเช เชเซเช. Win32 เชฌเชฟเชฒเซเชกเซเชธ เช
เชฅเชตเชพ Linux เชเชชเชฏเซเชเชฟเชคเชพเช เชถเซเชงเชตเชพเชจเซ เช
เชฅเชตเชพ Linux เชถเซเชฒเชฎเชพเช เชเชเชจเซ เชคเชฎเชพเชฐเชพ เชตเชฐเซเชเชซเซเชฒเซเชจเซ เช
เชตเชฐเซเชงเชตเชพเชจเซ เชเชฐเซเชฐ เชจเชฅเซ. เชฎเชพเชคเซเชฐ
เชเชชเชฐ เชตเชฐเซเชฃเชตเซเชฒ เชธเชเชชเซเชฐเซเชฃ เชธเซเชฐเซเชค เชเซเชก, เชคเซเชฎเช เชคเซเชจเซ เชคเชฎเชพเชฐเชพ เชตเชฐเซเชเชซเซเชฒเซเชฎเชพเช เชธเชพเชฎเซเชฒ เชเชฐเชตเชพ เชฎเชพเชเซ เชตเชงเชพเชฐเชพเชจเซ เชฎเชพเชฐเซเชเชฆเชฐเซเชถเชฟเชเชพ เชเชชเชฒเชฌเซเชง เชเซ
เชคเชฎเชจเซ เชเชฏเชพ Linux เชเชฆเซเชถเซ เชธเซเชฅเซ เชตเชงเซ เชเชชเชฏเซเชเซ เชฒเชพเชเซ เชเซ? เชตเชฟเชจเซเชกเซเชเชฎเชพเช เชเชพเชฎ เชเชฐเชคเซ เชตเชเชคเซ เช
เชจเซเชฏ เชเช เชธเชพเชฎเชพเชจเซเชฏ เชตเชธเซเชคเซเช เชเซเชเซ เชเซ? เชเชฟเชชเซเชชเชฃเซเชเชฎเชพเช เชฒเชเซ เช
เชฅเชตเชพ
เชธเซเชฐเซเชธ: www.habr.com