เจตเจฟเฉฐเจกเฉเจเจผ เจกเจฟเจตเฉเจฒเจชเจฐเจพเจ เจฆเจพ เจเฉฑเจ เจเจฎ เจธเจตเจพเจฒ: โเจ
เจเฉ เจตเฉ เจเฉเจ เจเจฟเจเจ เจจเจนเฉเจ เจนเฉ <ะะกะขะะะฌะขะ ะขะฃะข ะะฎะะะะฃะฎ ะะะะะะะฃ LINUX>
?. เจญเจพเจตเฉเจ เจเจน เจธเจผเจเจคเฉเจธเจผเจพเจฒเฉ เจธเจตเจพเจเจช เจนเฉเจตเฉ less
เจเจพเจ เจเจพเจฃเฉ-เจชเจเจพเจฃเฉ เจธเจพเจงเจจ grep
เจ sed
, เจตเจฟเฉฐเจกเฉเจเจผ เจกเจฟเจตเฉเจฒเจชเจฐ เจเจชเจฃเฉ เจฐเฉเจเจผเจพเจจเจพ เจฆเฉ เจเฉฐเจฎ เจตเจฟเฉฑเจ เจเจนเจจเจพเจ เจเจฎเจพเจเจกเจพเจ เจคเฉฑเจ เจเจธเจพเจจ เจชเจนเฉเฉฐเจ เจเจพเจนเฉเฉฐเจฆเฉ เจนเจจเฅค
wsl.exe
(เจเจฆเจพ.) wsl ls
). เจนเจพเจฒเจพเจเจเจฟ เจเจน เจเฉฑเจ เจฎเจนเฉฑเจคเจตเจชเฉเจฐเจจ เจธเฉเจงเจพเจฐ เจนเฉ, เจเจน เจตเจฟเจเจฒเจช เจฌเจนเฉเจค เจธเจพเจฐเฉ เจจเฉเจเจธเจพเจจเจพเจ เจคเฉเจ เจชเฉเฉเจค เจนเฉเฅค
- เจธเจฐเจต เจตเจฟเจเจชเจ เจเฉเฉ
wsl
เจฅเจเจพเจตเจ เจ เจคเฉ เจเฉเจฐ เจเฉเจฆเจฐเจคเฉ. - เจเจฐเจเฉเจฎเฉเจเจเจพเจ เจตเจฟเฉฑเจ เจตเจฟเฉฐเจกเฉเจเจผ เจชเจพเจฅ เจนเจฎเฉเจธเจผเจพ เจเฉฐเจฎ เจจเจนเฉเจ เจเจฐเจฆเฉ เจเจฟเจเจเจเจฟ เจฌเฉเจเจธเจฒเฉเจธเจผเจพเจ เจจเฉเฉฐ เจกเจพเจเจฐเฉเจเจเจฐเฉ เจตเจฟเจญเจพเจเจเจพเจ เจฆเฉ เจฌเจเจพเจ เจฌเจเจฃ เจตเจพเจฒเฉ เจ เฉฑเจเจฐเจพเจ เจตเจเฉเจ เจธเจฎเจเจฟเจ เจเจพเจเจฆเจพ เจนเฉเฅค
- เจเจฐเจเฉเจฎเฉเจเจเจพเจ เจตเจฟเฉฑเจ เจตเจฟเฉฐเจกเฉเจเจผ เจฎเจพเจฐเจเจพเจ เจฆเจพ WSL เจตเจฟเฉฑเจ เจ เจจเฉเจธเจพเจฐเฉ เจฎเจพเจเจเจ เจชเฉเจเจเฉฐเจ เจตเจฟเฉฑเจ เจ เจจเฉเจตเจพเจฆ เจจเจนเฉเจ เจเฉเจคเจพ เจเจพเจเจฆเจพ เจนเฉเฅค
- เจเจชเจจเจพเจฎเจพเจ เจ เจคเฉ เจตเจพเจคเจพเจตเจฐเจฃ เจตเฉเจฐเฉเจเจฌเจฒเจพเจ เจตเจพเจฒเฉ WSL เจชเฉเจฐเฉเจซเจพเจเจฒเจพเจ เจตเจฟเฉฑเจ เจกเจฟเจซเฉเจฒเจ เจธเฉเจเจฟเฉฐเจเจพเจ เจฆเจพ เจธเจจเจฎเจพเจจ เจจเจนเฉเจ เจเฉเจคเจพ เจเจพเจเจฆเจพ เจนเฉเฅค
- เจฒเฉเจจเจเจธ เจฎเจพเจฐเจ เจธเฉฐเจชเฉเจฐเจจเจคเจพ เจธเจฎเจฐเจฅเจฟเจค เจจเจนเฉเจ เจนเฉเฅค
- เจเจฎเจพเจเจก เจธเฉฐเจชเฉเจฐเจจเจคเจพ เจธเจฎเจฐเจฅเจฟเจค เจจเจนเฉเจ เจนเฉเฅค
- เจเจฐเจเฉเจฎเฉเจเจ เจชเฉเจฐเจพ เจเจฐเจจเจพ เจธเจฎเจฐเจฅเจฟเจค เจจเจนเฉเจ เจนเฉเฅค
เจจเจคเฉเจเฉ เจตเจเฉเจ, เจฒเฉเจจเจเจธ เจเจฎเจพเจเจกเจพเจ เจจเฉเฉฐ เจตเจฟเฉฐเจกเฉเจเจผ เจฆเฉ เจ เจงเฉเจจ เจฆเฉเจเฉ เจฆเจฐเจเฉ เจฆเฉ เจจเจพเจเจฐเจฟเจเจพเจ เจตเจพเจเจ เจธเจฎเจเจฟเจ เจเจพเจเจฆเจพ เจนเฉ-เจ เจคเฉ เจฎเฉเจฒ เจเจฎเจพเจเจกเจพเจ เจจเจพเจฒเฉเจ เจตเจฐเจคเจฃเจพ เจตเจงเฉเจฐเฉ เจฎเฉเจธเจผเจเจฒ เจนเฉเฉฐเจฆเจพ เจนเฉเฅค เจเจจเฉเจนเจพเจ เจฆเฉ เจ เจงเจฟเจเจพเจฐเจพเจ เจฆเฉ เจฌเจฐเจพเจฌเจฐเฉ เจเจฐเจจ เจฒเจ, เจธเฉเจเฉเจฌเฉฑเจง เจธเจฎเฉฑเจธเจฟเจเจตเจพเจ เจจเฉเฉฐ เจนเฉฑเจฒ เจเจฐเจจเจพ เจเจผเจฐเฉเจฐเฉ เจนเฉ.
PowerShell เจซเฉฐเจเจธเจผเจจ เจฐเฉเจชเจฐ
PowerShell เจซเฉฐเจเจธเจผเจจ เจฐเฉเจชเจฐเจธ เจจเจพเจฒ, เจ
เจธเฉเจ เจเจฎเจพเจเจก เจธเฉฐเจชเฉเจฐเจจเจคเจพ เจจเฉเฉฐ เจเฉเฉ เจธเจเจฆเฉ เจนเจพเจ เจ
เจคเฉ เจ
เจเฉเจคเจฐเจพเจ เจฆเฉ เจฒเฉเฉ เจจเฉเฉฐ เจเจคเจฎ เจเจฐ เจธเจเจฆเฉ เจนเจพเจ wsl
, เจตเจฟเฉฐเจกเฉเจเจผ เจฎเจพเจฐเจเจพเจ เจจเฉเฉฐ WSL เจฎเจพเจฐเจเจพเจ เจตเจฟเฉฑเจ เจ
เจจเฉเจตเจพเจฆ เจเจฐเจจเจพเฅค เจธเจผเฉเฉฑเจฒเจพเจ เจฒเจ เจฌเฉเจจเจฟเจเจฆเฉ เจฒเฉเฉเจพเจ:
- เจนเจฐเฉเจ เจฒเฉเจจเจเจธ เจเจฎเจพเจเจก เจฒเจ เจเฉฑเจเฉ เจจเจพเจฎ เจจเจพเจฒ เจเฉฑเจ เจซเฉฐเจเจธเจผเจจ เจฐเฉเจชเจฐ เจนเฉเจฃเจพ เจเจพเจนเฉเจฆเจพ เจนเฉเฅค
- เจธเจผเฉเฉฑเจฒ เจจเฉเฉฐ เจเจฐเจเฉเจฎเฉเจเจ เจฆเฉ เจคเฉเจฐ 'เจคเฉ เจชเจพเจธ เจเฉเจคเฉ เจตเจฟเฉฐเจกเฉเจเจผ เจฎเจพเจฐเจเจพเจ เจจเฉเฉฐ เจชเจเจพเจฃเจจเจพ เจเจพเจนเฉเจฆเจพ เจนเฉ เจ เจคเฉ เจเจนเจจเจพเจ เจจเฉเฉฐ WSL เจฎเจพเจฐเจเจพเจ เจตเจฟเฉฑเจ เจฌเจฆเจฒเจฃเจพ เจเจพเจนเฉเจฆเจพ เจนเฉเฅค
- เจธเจผเฉเฉฑเจฒ เจจเฉเฉฐ เจเจพเจฒ เจเจฐเจจเจพ เจเจพเจนเฉเจฆเจพ เจนเฉ
wsl
เจเจฟเจธเฉ เจตเฉ เจชเจพเจเจชเจฒเจพเจเจจ เจเฉฐเจชเฉเฉฑเจ เจฒเจ เจขเฉเจเจตเฉเจ เจฒเฉเจจเจเจธ เจเจฎเจพเจเจก เจฆเฉ เจจเจพเจฒ เจ เจคเฉ เจซเฉฐเจเจธเจผเจจ เจจเฉเฉฐ เจชเจพเจธ เจเฉเจคเฉ เจเจฟเจธเฉ เจตเฉ เจเจฎเจพเจเจก เจฒเจพเจเจจ เจเจฐเจเฉเจฎเฉเจเจ เจจเฉเฉฐ เจชเจพเจธ เจเจฐเจจเจพเฅค
เจเจฟเจเจเจเจฟ เจเจน เจชเฉเจเจฐเจจ เจเจฟเจธเฉ เจตเฉ เจเจฎเจพเจเจก 'เจคเฉ เจฒเจพเจเฉ เจเฉเจคเจพ เจเจพ เจธเจเจฆเจพ เจนเฉ, เจ เจธเฉเจ เจเจนเจจเจพเจ เจฐเฉเจชเจฐเจพเจ เจฆเฉ เจชเจฐเจฟเจญเจพเจธเจผเจพ เจจเฉเฉฐ เจธเฉฐเจเฉเจช เจเจฐ เจธเจเจฆเฉ เจนเจพเจ เจ เจคเฉ เจเจนเจจเจพเจ เจจเฉเฉฐ เจเจฏเจพเจค เจเจฐเจจ เจฒเจ เจเจฎเจพเจเจกเจพเจ เจฆเฉ เจธเฉเจเฉ เจคเฉเจ เจเจคเฉเจธเจผเฉเจฒ เจฐเฉเจช เจตเจฟเฉฑเจ เจคเจฟเจเจฐ เจเจฐ เจธเจเจฆเฉ เจนเจพเจเฅค
# 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
เจชเจพเจเจชเจฒเจพเจเจจ เจเฉฐเจชเฉเฉฑเจ เจ
เจคเฉ เจเฉเจ เจตเฉ เจเจฎเจพเจเจก เจฒเจพเจเจจ เจเจฐเจเฉเจฎเฉเจเจเฅค
เจเจนเจจเจพเจ เจฐเฉเจชเจฐเจพเจ เจฆเฉ เจจเจพเจฒ เจคเฉเจธเฉเจ เจเจชเจฃเฉ เจฎเจจเจชเจธเฉฐเจฆ เจฒเฉเจจเจเจธ เจเจฎเจพเจเจกเจพเจ เจจเฉเฉฐ เจเฉฑเจ เจ
เจเฉเจคเจฐ เจเฉเฉเฉ เจฌเจฟเจจเจพเจ เจตเจงเฉเจฐเฉ เจเฉเจฆเจฐเจคเฉ เจคเจฐเฉเจเฉ เจจเจพเจฒ เจเจพเจฒ เจเจฐ เจธเจเจฆเฉ เจนเฉ wsl
เจ
เจคเฉ เจเจธ เจฌเจพเจฐเฉ เจเจฟเฉฐเจคเจพ เจเฉเจคเฉ เจฌเจฟเจจเจพเจ เจเจฟ เจฐเจธเจคเฉ เจเจฟเจตเฉเจ เจฌเจฆเจฒเฉ เจเจพเจเจฆเฉ เจนเจจ:
man bash
less -i $profile.CurrentUserAllHosts
ls -Al C:Windows | less
grep -Ein error *.log
tail -f *.log
เจเจฎเจพเจเจกเจพเจ เจฆเจพ เจฎเฉเจฒ เจธเฉเฉฑเจ เจเฉฑเจฅเฉ เจฆเจฟเจเจพเจเจ เจเจฟเจ เจนเฉ, เจชเจฐ เจคเฉเจธเฉเจ เจเจฟเจธเฉ เจตเฉ เจฒเฉเจจเจเจธ เจเจฎเจพเจเจก เจฒเจ เจเจธเจจเฉเฉฐ เจธเฉเจเฉ เจตเจฟเฉฑเจ เจธเจผเจพเจฎเจฒ เจเจฐเจเฉ เจเฉฑเจ เจธเจผเฉเฉฑเจฒ เจฌเจฃเจพ เจธเจเจฆเฉ เจนเฉเฅค เจเฉเจเจฐ เจคเฉเจธเฉเจ เจเจธ เจเฉเจก เจจเฉเฉฐ เจเจชเจฃเฉ เจตเจฟเฉฑเจ เจเฉเฉเจฆเฉ เจนเฉ
เจชเฉเจฐเจต-เจจเจฟเจฐเจงเจพเจฐเจค เจธเฉเจเจฟเฉฐเจเจพเจ
เจฒเฉเจจเจเจธ เจตเจฟเฉฑเจ, เจฒเฉเจเจฟเจจ เจชเฉเจฐเฉเจซเจพเจเจฒเจพเจ เจตเจฟเฉฑเจ เจเจชเจจเจพเจฎเจพเจ เจ
เจคเฉ/เจเจพเจ เจตเจพเจคเจพเจตเจฐเจฃ เจตเฉเจฐเฉเจเจฌเจฒเจพเจ เจจเฉเฉฐ เจชเจฐเจฟเจญเจพเจธเจผเจฟเจค เจเจฐเจจเจพ เจเจฎ เจเฉฑเจฒ เจนเฉ, เจ
เจเจธเจฐ เจตเจฐเจคเฉเจเจ เจเจพเจเจฆเฉเจเจ เจเจฎเจพเจเจกเจพเจ เจฒเจ เจกเจฟเจซเฉเจฒเจ เจชเฉเจฐเจพเจฎเฉเจเจฐ เจธเฉเฉฑเจ เจเจฐเจจเจพ (เจเจฆเจพเจนเจฐเจจ เจฒเจ, alias ls=ls -AFh
เจ export LESS=-i
). เจเฉฑเจ เจเฉเจฐ-เจเฉฐเจเจฐเจเจเจเจฟเจต เจธเจผเฉเฉฑเจฒ เจฆเฉเจเจฐเจพ เจชเฉเจฐเฉเจเจธเฉ เจเจฐเจจ เจฆเฉ เจจเฉเจเจธเจพเจจเจพเจ เจตเจฟเฉฑเจเฉเจ เจเฉฑเจ เจนเฉ wsl.exe
- เจเจฟ เจชเฉเจฐเฉเจซเจพเจเจฒ เจฒเฉเจก เจจเจนเฉเจ เจเฉเจคเฉ เจเจ เจนเจจ, เจเจธ เจฒเจ เจเจน เจตเจฟเจเจฒเจช เจฎเฉเจฒ เจฐเฉเจช เจตเจฟเฉฑเจ เจเจชเจฒเจฌเจง เจจเจนเฉเจ เจนเจจ (เจเจฟเจตเฉเจ เจเจฟ ls
WSL เจตเจฟเฉฑเจ เจ
เจคเฉ wsl ls
เจเฉฑเจชเจฐ เจชเจฐเจฟเจญเจพเจธเจผเจฟเจค เจเจชเจจเจพเจฎ เจจเจพเจฒ เจตเฉฑเจเจฐเจพ เจตเจฟเจตเจนเจพเจฐ เจเจฐเฉเจเจพ)เฅค
PowerShell เจชเฉเจฐเจฆเจพเจจ เจเจฐเจฆเจพ เจนเฉ -a
เจจเจพเจฒ เจธเจฌเฉฐเจง เจฐเฉฑเจเจฆเจพ เจนเฉ -ArgumentList
), เจเฉ เจเจฟ เจฒเฉเจจเจเจธ เจเจฎเจพเจเจกเจพเจ เจจเจพเจฒ เจเจเจฐเจพเจเจเฉ เจเฉ เจเจฐเจเฉเจฎเฉเจเจเจพเจ เจตเจเฉเจ เจ
เฉฐเจธเจผเจ เจจเจพเจฎ เจฒเฉเจเจฆเฉ เจนเจจ), เจ
เจคเฉ เจกเจฟเจซเฉเจฒเจ เจฎเฉเฉฑเจฒเจพเจ เจจเฉเฉฐ เจชเจฐเจฟเจญเจพเจธเจผเจฟเจค เจเจฐเจจ เจฒเจ เจธเฉฐเจเฉเจเจธ เจธเจญ เจคเฉเจ เจขเฉเจเจตเจพเจ เจจเจนเฉเจ เจนเฉเจตเฉเจเจพ (เจกเจฟเจซเฉเจฒเจ เจเจฐเจเฉเจฎเฉเจเจเจพเจ เจฒเจ เจเฉเฉฐเจเฉ เจตเจฟเฉฑเจ เจชเฉเจฐเจพเจฎเฉเจเจฐ เจฆเฉ เจจเจพเจฎ เจฆเฉ เจฒเฉเฉ เจนเฉเฉฐเจฆเฉ เจนเฉ, เจจเจพ เจเจฟ เจธเจฟเจฐเจซเจผ เจเจฎเจพเจเจก เจฆเจพ เจจเจพเจฎ) .
เจนเจพเจฒเจพเจเจเจฟ, เจธเจพเจกเฉ เจธเจผเฉเฉฑเจฒเจพเจ เจตเจฟเฉฑเจ เจเฉฑเจ เจฎเจพเจฎเฉเจฒเฉ เจธเฉเจง เจฆเฉ เจจเจพเจฒ, เจ
เจธเฉเจ เจเฉฑเจ เจฎเจพเจกเจฒ เจจเฉเฉฐ เจฒเจพเจเฉ เจเจฐ เจธเจเจฆเฉ เจนเจพเจ $PSDefaultParameterValues
, เจ
เจคเฉ เจฒเฉเจจเจเจธ เจเจฎเจพเจเจกเจพเจ เจฒเจ เจกเจฟเจซเฉเจฒเจ เจตเจฟเจเจฒเจชเจพเจ เจจเฉเฉฐ เจธเจฎเจฐเฉฑเจฅ เจฌเจฃเจพเจ!
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
. เจนเฉเจ เจพเจ เจฆเจฟเจเจพเจเจเจฆเจพ เจนเฉ เจเจฟ เจกเจฟเจซเฉเจฒเจ เจธเฉเจเจฟเฉฐเจเจพเจ เจจเฉเฉฐ เจเฉเจเจซเจฟเจเจฐ เจเจฐเจจ เจฒเจ เจคเฉเจนเจพเจกเฉ PowerShell เจชเฉเจฐเฉเจซเจพเจเจฒ เจตเจฟเฉฑเจ เจจเจฟเจฐเจฆเฉเจธเจผ เจเจฟเจตเฉเจ เจธเจผเจพเจฎเจฒ เจเจฐเจจเฉ เจนเจจเฅค เจนเฉเจฃ เจ
เจธเฉเจ เจเจน เจเจฐ เจธเจเจฆเฉ เจนเจพเจ!
$WslDefaultParameterValues["grep"] = "-E"
$WslDefaultParameterValues["less"] = "-i"
$WslDefaultParameterValues["ls"] = "-AFh --group-directories-first"
เจเจฟเจเจเจเจฟ เจชเฉเจฐเจพเจฎเฉเจเจฐเจพเจ เจฆเฉ เจฌเจพเจ
เจฆ เจฎเจพเจกเจฒ เจฌเจฃเจพเจ เจเจ เจนเจจ $PSDefaultParameterValues
, เจคเฉเจธเฉเจ เจเจฐ เจธเฉฑเจเจฆเฉ เจนเฉ "Disabled"
เจ
เจฐเจฅ เจตเจฟเฉฑเจ $true
. เจเฉฑเจ เจตเฉฑเจเจฐเฉ เจนเฉเจธเจผ เจเฉเจฌเจฒ เจฆเจพ เจเฉฑเจ เจตเจพเจงเฉ เจซเจพเจเจฆเจพ เจ
เจฏเฉเจ เจเจฐเจจ เจฆเฉ เจฏเฉเจเจคเจพ เจนเฉ $WslDefaultParameterValues
เจคเฉเจ เจตเฉฑเจเจฐเฉ เจคเฉเจฐ 'เจคเฉ $PSDefaultParameterValues
.
เจฆเจฒเฉเจฒ เจฆเฉ เจชเฉเจฐเจคเฉ
PowerShell เจคเฉเจนเจพเจจเฉเฉฐ เจเจฎเจพเจเจก เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจเฉ เจเจฐเจเฉเจฎเฉเจเจ เจเฉเจฐเฉเจฒเจฐ เจฐเจเจฟเจธเจเจฐ เจเจฐเจจ เจฆเฉ เจเจเจพเจเจผเจค เจฆเจฟเฉฐเจฆเจพ เจนเฉ Register-ArgumentCompleter
. Bash เจธเจผเจเจคเฉเจธเจผเจพเจฒเฉ เจนเฉ
# 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 เจฆเฉ เจเจเฉเจเฉฐเจชเจฒเฉเจธเจผเจจ เจซเฉฐเจเจธเจผเจจเจพเจ เจฆเฉเจเจฐเจพ เจเจฎเฉเจฆ เจเฉเจคเฉ เจซเจพเจฐเจฎเฉเจ เจตเจฟเฉฑเจเจชเฉเจฐเฉเจเจฐเจพเจฎเฉเจฌเจฒ เจเจเฉ-เจชเฉเจฐเจจเจคเจพ bash - เจ
เจธเฉเจ เจเฉเจฐเจพเจเจธเจซเจฐ เจเจฐเจจ เจฒเจ เจเฉฑเจ เจเจฎเจพเจเจก เจฒเจพเจเจจ เจฌเจฃเจพเจเจเจฆเฉ เจนเจพเจ
wsl.exe
, เจเฉ เจเจน เจธเฉเจจเจฟเจธเจผเจเจฟเจค เจเจฐเจฆเจพ เจนเฉ เจเจฟ เจตเจพเจคเจพเจตเจฐเจฃ เจธเจนเฉ เจขเฉฐเจ เจจเจพเจฒ เจธเฉเจ เจ เจช เจเฉเจคเจพ เจเจฟเจ เจนเฉ, เจขเฉเจเจตเฉเจ เจเจเฉ-เจเฉฐเจชเจฒเฉเจธเจผเจจ เจซเฉฐเจเจธเจผเจจ เจจเฉเฉฐ เจเจพเจฒ เจเจฐเจฆเจพ เจนเฉ, เจ เจคเฉ เจจเจคเฉเจเจฟเจเจ เจจเฉเฉฐ เจฒเจพเจเจจ-เจฆเจฐ-เจฒเจพเจเจจ เจซเฉเจธเจผเจจ เจตเจฟเฉฑเจ เจเจเจเจชเฉเฉฑเจ เจเจฐเจฆเจพ เจนเฉเฅค - เจซเจฟเจฐ เจ
เจธเฉเจ เจเจพเจฒ เจเจฐเจฆเฉ เจนเจพเจ
wsl
เจเจฎเจพเจเจก เจฒเจพเจเจจ เจฆเฉ เจจเจพเจฒ, เจ เจธเฉเจ เจเจเจเจชเฉเฉฑเจ เจจเฉเฉฐ เจฒเจพเจเจจ เจตเจฟเจญเจพเจเจเจพเจ เจฆเฉเจเจฐเจพ เจตเฉฑเจ เจเจฐเจฆเฉ เจนเจพเจ เจ เจคเฉ เจนเจฐเฉเจ เจฒเจ เจเจจเจฐเฉเจ เจเจฐเจฆเฉ เจนเจพเจCompletionResults
, เจเจนเจจเจพเจ เจจเฉเฉฐ เจเจพเจเจเจฃเจพ เจ เจคเฉ เจ เฉฑเจเจฐเจพเจ เจคเฉเจ เจฌเจเจฃเจพ เจเจฟเจตเฉเจ เจเจฟ เจธเจชเฉเจธ เจ เจคเฉ เจฌเจฐเฉเจเจเจธ เจเฉ เจเจฟ เจจเจนเฉเจ เจคเจพเจ เจเจฒเจค เจตเจฟเจเจเจฟเจ เจเฉเจคเฉ เจเจพเจตเฉเจเฉเฅค
เจจเจคเฉเจเฉ เจตเจเฉเจ, เจธเจพเจกเฉ เจฒเฉเจจเจเจธ เจเจฎเจพเจเจก เจธเจผเฉเฉฑเจฒ bash เจตเจพเจเจ เจนเฉ เจเจเฉเจเฉฐเจชเจฒเฉเจธเจผเจจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจจเจเฉ! เจเจฆเจพเจนเจฐเจฃ เจฒเจ:
ssh -c <TAB> -J <TAB> -m <TAB> -O <TAB> -o <TAB> -Q <TAB> -w <TAB> -b <TAB>
เจนเจฐเฉเจ เจธเจตเฉ-เจธเฉฐเจชเฉเจฐเจจเจคเจพ เจชเจฟเจเจฒเฉ เจเจฐเจเฉเจฎเฉเจเจ เจฒเจ เจตเจฟเจธเจผเฉเจธเจผ เจฎเฉเฉฑเจฒเจพเจ เจฆเฉ เจธเจชเจฒเจพเจ เจเจฐเจฆเฉ เจนเฉ, เจธเฉฐเจฐเจเจจเจพ เจกเฉเจเจพ เจจเฉเฉฐ เจชเฉเฉเจนเจฆเฉ เจนเฉ เจเจฟเจตเฉเจ เจเจฟ WSL เจคเฉเจ เจเจพเจฃเฉ-เจชเจเจพเจฃเฉ เจนเฉเจธเจ!
<TAB>
เจชเฉเจฐเจพเจฎเฉเจเจฐเจพเจ เจฐเจพเจนเฉเจ เจเฉฑเจเจฐ เจฒเจตเฉเจเจพเฅค <Ctrl + ะฟัะพะฑะตะป>
เจธเจพเจฐเฉ เจเจชเจฒเจฌเจง เจตเจฟเจเจฒเจช เจฆเจฟเจเจพเจเจเจพเฅค
เจจเจพเจฒ เจนเฉ, เจเจฟเจเจเจเจฟ เจธเจพเจกเฉ เจเฉเจฒ เจนเฉเจฃ bash เจเจเฉเจเฉฐเจชเจฒเฉเจธเจผเจจ เจนเฉ, เจคเฉเจธเฉเจ PowerShell เจตเจฟเฉฑเจ เจธเจฟเฉฑเจงเฉ เจฒเฉเจจเจเจธ เจฎเจพเจฐเจเจพเจ เจจเฉเฉฐ เจเจเฉเจเฉฐเจชเจฒเฉเจ เจเจฐ เจธเจเจฆเฉ เจนเฉ!
less /etc/<TAB>
ls /usr/share/<TAB>
vim ~/.bash<TAB>
เจ เจเจฟเจนเฉ เจฎเจพเจฎเจฒเจฟเจเจ เจตเจฟเฉฑเจ เจเจฟเฉฑเจฅเฉ bash เจเจเฉเจเฉฐเจชเจฒเฉเจธเจผเจจ เจเฉเจ เจจเจคเฉเจเจพ เจจเจนเฉเจ เจฆเจฟเฉฐเจฆเฉ เจนเฉ, PowerShell เจธเจฟเจธเจเจฎ เจกเจฟเจซเฉเจฒเจ เจตเจฟเฉฐเจกเฉเจเจผ เจฎเจพเจฐเจเจพเจ 'เจคเฉ เจตเจพเจชเจธ เจ เจเจพเจเจฆเจพ เจนเฉเฅค เจเจธ เจคเจฐเฉเจนเจพเจ, เจ เจญเจฟเจเจธ เจตเจฟเฉฑเจ, เจคเฉเจธเฉเจ เจเฉฑเจเฉ เจธเจฎเฉเจ เจเจชเจฃเฉ เจตเจฟเจตเฉเจ 'เจคเฉ เจฆเฉเจตเฉเจ เจฎเจพเจฐเจเจพเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐ เจธเจเจฆเฉ เจนเฉ.
เจธเจฟเฉฑเจเจพ
PowerShell เจ
เจคเฉ WSL เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจนเฉเจ, เจ
เจธเฉเจ เจฒเฉเจจเจเจธ เจเจฎเจพเจเจกเจพเจ เจจเฉเฉฐ เจตเจฟเฉฐเจกเฉเจเจผ เจตเจฟเฉฑเจ เจฎเฉเจฒ เจเจชเจฒเฉเจเฉเจธเจผเจจเจพเจ เจฆเฉ เจฐเฉเจช เจตเจฟเฉฑเจ เจเจเฉเจเฉเจฐเจฟเจค เจเจฐ เจธเจเจฆเฉ เจนเจพเจเฅค Win32 เจฌเจฟเจฒเจกเจธ เจเจพเจ เจฒเฉเจจเจเจธ เจเจชเจฏเฉเจเจคเจพเจตเจพเจ เจฆเฉ เจเฉเจ เจเจฐเจจ เจเจพเจ เจฒเฉเจจเจเจธ เจธเจผเฉเฉฑเจฒ 'เจคเฉ เจเจพ เจเฉ เจคเฉเจนเจพเจกเฉ เจตเจฐเจเจซเจฒเฉ เจจเฉเฉฐ เจฐเฉเจเจฃ เจฆเฉ เจเฉเจ เจฒเฉเฉ เจจเจนเฉเจ เจนเฉเฅค เจฌเจธ
เจเฉฑเจชเจฐ เจฆเฉฑเจธเจฟเจ เจเจฟเจ เจชเฉเจฐเจพ เจธเจฐเฉเจค เจเฉเจก, เจจเจพเจฒ เจนเฉ เจเจธเจจเฉเฉฐ เจคเฉเจนเจพเจกเฉ เจตเจฐเจเจซเจฒเฉ เจตเจฟเฉฑเจ เจธเจผเจพเจฎเจฒ เจเจฐเจจ เจฒเจ เจตเจพเจงเฉ เจฆเจฟเจธเจผเจพ-เจจเจฟเจฐเจฆเฉเจธเจผ เจเจชเจฒเจฌเจง เจนเจจ
เจคเฉเจนเจพเจจเฉเฉฐ เจเจฟเจนเฉเฉเจเจ เจฒเฉเจจเจเจธ เจเจฎเจพเจเจกเจพเจ เจธเจญ เจคเฉเจ เจฒเจพเจญเจฆเจพเจเจ เจฒเฉฑเจเจฆเฉเจเจ เจนเจจ? เจตเจฟเฉฐเจกเฉเจเจผ เจตเจฟเฉฑเจ เจเฉฐเจฎ เจเจฐเจฆเฉ เจธเจฎเฉเจ เจนเฉเจฐ เจเจฟเจนเฉเฉเจเจ เจเจฎ เจเฉเจเจผเจพเจ เจเฉเฉฐเจฎ เจนเฉเฉฐเจฆเฉเจเจ เจนเจจ? เจเจฟเฉฑเจชเจฃเฉเจเจ เจตเจฟเฉฑเจ เจฒเจฟเจเฉ เจเจพเจ
เจธเจฐเฉเจค: www.habr.com