PowerShell, WSL เดŽเดจเตเดจเดฟเดต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต Windows-เดฒเต‡เด•เตเด•เต Linux เด•เดฎเดพเตปเดกเตเด•เตพ เดธเด‚เดฏเต‹เดœเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต

เดตเดฟเตปเดกเต‹เดธเต เดกเต†เดตเดฒเดชเตเดชเตผเดฎเดพเดฐเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เด’เดฐเต เดธเดพเดงเดพเดฐเดฃ เดšเต‹เดฆเตเดฏเด‚: โ€œเดŽเดจเตเดคเตเด•เตŠเดฃเตเดŸเต เด‡เดชเตเดชเต‹เดดเตเด‚ เด‡เดฒเตเดฒ <ะ’ะกะขะะ’ะฌะขะ• ะขะฃะข ะ›ะฎะ‘ะ˜ะœะฃะฎ ะšะžะœะะะ”ะฃ LINUX>?. เด…เดคเต เดถเด•เตเดคเดฎเดพเดฏ เดธเตเดตเตˆเดชเตเดชเต เด†เดฃเต†เด™เตเด•เดฟเดฒเตเด‚ less เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดชเดฐเดฟเดšเดฟเดคเดฎเดพเดฏ เด‰เดชเด•เดฐเดฃเด™เตเด™เตพ grep เด…เดฅเดตเดพ sed, Windows เดกเดตเดฒเดชเตเดชเตผเดฎเดพเตผ เด…เดตเดฐเตเดŸเต† เดฆเตˆเดจเด‚เดฆเดฟเดจ เดœเต‹เดฒเดฟเดฏเดฟเตฝ เดˆ เด•เดฎเดพเตปเดกเตเด•เตพ เดŽเดณเตเดชเตเดชเดคเตเดคเดฟเตฝ เด†เด•เตเดธเดธเต เดšเต†เดฏเตเดฏเดพเตป เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเต.

เดฒเดฟเดจเด•เตเดธเดฟเดจเตเดณเตเดณ เดตเดฟเตปเดกเต‹เดธเต เดธเดฌเตเดธเดฟเดธเตเดฑเตเดฑเด‚ (WSL) เด‡เด•เตเด•เดพเดฐเตเดฏเดคเตเดคเดฟเตฝ เด’เดฐเต เดตเดฒเดฟเดฏ เดฎเตเดจเตเดจเต‡เดฑเตเดฑเด‚ เดจเดŸเดคเตเดคเดฟเดฏเดฟเดŸเตเดŸเตเดฃเตเดŸเต. เดตเดฟเตปเดกเต‹เดธเดฟเตฝ เดจเดฟเดจเตเดจเต เดฒเดฟเดจเด•เตเดธเต เด•เดฎเดพเตปเดกเตเด•เตพ เดชเตเดฐเต‹เด•เตเดธเดฟ เดšเต†เดฏเตเดคเตเด•เตŠเดฃเตเดŸเต เดตเดฟเดณเดฟเด•เตเด•เดพเตป เด‡เดคเต เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต wsl.exe (เด‰เดฆเดพ. wsl ls). เด‡เดคเต เด•เดพเดฐเตเดฏเดฎเดพเดฏ เดชเตเดฐเต‹เด—เดคเดฟเดฏเดพเดฃเต†เด™เตเด•เดฟเดฒเตเด‚, เดˆ เด“เดชเตเดทเตป เดจเดฟเดฐเดตเดงเดฟ เดฆเต‹เดทเด™เตเด™เดณเดพเตฝ เด•เดทเตเดŸเดชเตเดชเต†เดŸเตเดจเตเดจเต.

  • เดธเตผเดตเตเดตเดตเตเดฏเดพเดชเดฟเดฏเดพเดฏ เด•เต‚เดŸเตเดŸเดฟเดšเตเดšเต‡เตผเด•เตเด•เตฝ wsl เดฎเดŸเตเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเตเด‚ เดชเตเดฐเด•เตƒเดคเดฟเดตเดฟเดฐเตเดฆเตเดงเดตเตเดฎเดพเดฃเต.
  • เดกเดฏเดฑเด•เตโ€ŒเดŸเดฑเดฟ เดธเต†เดชเตเดชเดฑเต‡เดฑเตเดฑเดฑเตเด•เดณเต‡เด•เตเด•เดพเตพ เดฌเดพเด•เตเด•เตโ€Œเดธเตเดฒเดพเดทเตเด•เตพ เดŽเดธเตโ€Œเด•เต‡เดชเตเดชเต เดชเตเดฐเดคเต€เด•เด™เตเด™เดณเดพเดฏเดฟ เดตเตเดฏเดพเด–เตเดฏเดพเดจเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเดจเตเดจเดคเดฟเดจเดพเตฝ เด†เตผเด—เตเดฏเตเดฎเต†เดจเตเดฑเตเด•เดณเดฟเดฒเต† เดตเดฟเตปเดกเต‹เดธเต เดชเดพเดคเตเดคเตเด•เตพ เดŽเดฒเตเดฒเดพเดฏเตเดชเตเดชเต‹เดดเตเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดฟเดฒเตเดฒ.
  • เด†เตผเด—เตเดฏเตเดฎเต†เดจเตเดฑเตเด•เดณเดฟเดฒเต† เดตเดฟเตปเดกเต‹เดธเต เดชเดพเดฅเตเด•เตพ WSL-เดฒเต† เดฎเตŒเดฃเตเดŸเต เดชเต‹เดฏเดฟเดจเตเดฑเดฟเดฒเต‡เด•เตเด•เต เดตเดฟเดตเตผเดคเตเดคเดจเด‚ เดšเต†เดฏเตเดฏเดชเตเดชเต†เดŸเตเดจเตเดจเดฟเดฒเตเดฒ.
  • เด…เดชเดฐเดจเดพเดฎเด™เตเด™เดณเตเด‚ เดŽเตปเดตเดฏเต‹เตบเดฎเต†เดจเตเดฑเต เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเตเด•เดณเตเด‚ เด‰เดณเตเดณ WSL เดชเตเดฐเตŠเดซเตˆเดฒเตเด•เดณเดฟเตฝ เดธเตเดฅเดฟเดฐเดธเตเดฅเดฟเดคเดฟ เด•เตเดฐเดฎเต€เด•เดฐเดฃเด™เตเด™เตพ เดฎเดพเดจเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเดจเตเดจเดฟเดฒเตเดฒ.
  • Linux เดชเดพเดคเตเดคเต เดชเต‚เตผเดคเตเดคเต€เด•เดฐเดฃเด‚ เดชเดฟเดจเตเดคเตเดฃเดฏเตเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ.
  • เด•เดฎเดพเตปเดกเต เดชเต‚เตผเดคเตเดคเดฟเดฏเดพเด•เตเด•เตฝ เดชเดฟเดจเตเดคเตเดฃเดฏเตเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ.
  • เดตเดพเดฆเด‚ เดชเต‚เตผเดคเตเดคเต€เด•เดฐเดฃเด‚ เดชเดฟเดจเตเดคเตเดฃเดฏเตเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ.

เดคเตฝเดซเดฒเดฎเดพเดฏเดฟ, เดฒเดฟเดจเด•เตเดธเต เด•เดฎเดพเตปเดกเตเด•เตพ เดตเดฟเตปเดกเต‹เดธเดฟเดจเต เด•เต€เดดเดฟเตฝ เดฐเดฃเตเดŸเดพเด‚ เดคเดฐเด‚ เดชเต—เดฐเดจเตเดฎเดพเดฐเต†เดชเตเดชเต‹เดฒเต†เดฏเดพเดฃเต เดชเดฐเดฟเด—เดฃเดฟเด•เตเด•เตเดจเตเดจเดคเต - เด•เต‚เดŸเดพเดคเต† เดจเต‡เดฑเตเดฑเต€เดตเต เด•เดฎเดพเตปเดกเตเด•เดณเต‡เด•เตเด•เดพเตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเตป เดฌเตเดฆเตเดงเดฟเดฎเตเดŸเตเดŸเดพเดฃเต. เด…เดตเดฐเตเดŸเต† เด…เดตเด•เดพเดถเด™เตเด™เตพ เดคเตเดฒเตเดฏเดฎเดพเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เดฒเดฟเดธเตเดฑเตเดฑเตเดšเต†เดฏเตเดค เดชเตเดฐเดถเตเดจเด™เตเด™เตพ เดชเดฐเดฟเดนเดฐเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเต เด†เดตเดถเตเดฏเดฎเดพเดฃเต.

เดชเดตเตผเดทเต†เตฝ เดซเด‚เด—เตเดทเตป เดฑเดพเดชเตเดชเดฑเตเด•เตพ

PowerShell เดซเด‚เด—เตโ€Œเดทเตป เดฑเดพเดชเตเดชเดฑเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต, เดจเดฎเตเด•เตเด•เต เด•เดฎเดพเตปเดกเต เดชเต‚เตผเดคเตเดคเต€เด•เดฐเดฃเด‚ เดšเต‡เตผเด•เตเด•เดพเดจเตเด‚ เดชเตเดฐเดฟเดซเดฟเด•เตโ€Œเดธเตเด•เดณเตเดŸเต† เด†เดตเดถเตเดฏเด•เดค เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เดพเดจเตเด‚ เด•เดดเดฟเดฏเตเด‚. wsl, เดตเดฟเตปเดกเต‹เดธเต เดชเดพเดคเตเดคเตเด•เตพ WSL เดชเดพเดคเตเดคเตเด•เดณเดฟเดฒเต‡เด•เตเด•เต เดตเดฟเดตเตผเดคเตเดคเดจเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต. เดทเต†เดฒเตเดฒเตเด•เตพเด•เตเด•เตเดณเตเดณ เด…เดŸเดฟเดธเตเดฅเดพเดจ เด†เดตเดถเตเดฏเด•เดคเด•เตพ:

  • เด“เดฐเต‹ Linux เด•เดฎเดพเตปเดกเดฟเดจเตเด‚ เด’เดฐเต‡ เดชเต‡เดฐเดฟเตฝ เด’เดฐเต เดซเด‚เด—เตเดทเตป เดฑเดพเดชเตเดชเตผ เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเดฟเด•เตเด•เดฃเด‚.
  • เดทเต†เตฝ เด†เตผเด—เตเดฏเตเดฎเต†เดจเตเดฑเตเด•เดณเดพเดฏเดฟ เดชเดพเดธเตเดธเดพเด•เตเด•เดฟเดฏ เดตเดฟเตปเดกเต‹เดธเต เดชเดพเดคเตเดคเตเด•เตพ เดคเดฟเดฐเดฟเดšเตเดšเดฑเดฟเดฏเตเด•เดฏเตเด‚ เด…เดตเดฏเต† 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

เด•เดฎเดพเตปเดกเตเด•เดณเตเดŸเต† เด…เดŸเดฟเดธเตเดฅเดพเดจ เดธเต†เดฑเตเดฑเต เด‡เดตเดฟเดŸเต† เด•เดพเดฃเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต, เดŽเดจเตเดจเดพเตฝ เดฒเดฟเดธเตโ€Œเดฑเตเดฑเดฟเตฝ เดšเต‡เตผเดคเตเดคเตเด•เตŠเดฃเตเดŸเต เดเดคเต เดฒเดฟเดจเด•เตโ€Œเดธเต เด•เดฎเดพเตปเดกเดฟเดจเตเด‚ เดทเต†เตฝ เดธเตƒเดทเตโ€ŒเดŸเดฟเด•เตเด•เดพเดจเดพเด•เตเด‚. เดจเดฟเด™เตเด™เดณเดฟเดฒเต‡เด•เตเด•เต เดˆ เด•เต‹เดกเต เดšเต‡เตผเด•เตเด•เตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ เดชเตเดฐเตŠเดซเตˆเตฝ เดชเดตเตผเดทเต†เตฝ, เดจเต‡เดฑเตเดฑเต€เดตเต เด•เดฎเดพเตปเดกเตเด•เตพ เดชเต‹เดฒเต† เดˆ เด•เดฎเดพเตปเดกเตเด•เตพ เดŽเดฒเตเดฒเดพ PowerShell เดธเต†เดทเดจเดฟเดฒเตเด‚ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดฒเดญเตเดฏเดฎเดพเด•เตเด‚!

เดธเตเดฅเดฟเดฐเดธเตเดฅเดฟเดคเดฟ เด•เตเดฐเดฎเต€เด•เดฐเดฃเด™เตเด™เตพ

เดฒเดฟเดจเด•เตเดธเดฟเตฝ, เดฒเต‹เด—เดฟเตป เดชเตเดฐเตŠเดซเตˆเดฒเตเด•เดณเดฟเตฝ เด…เดชเดฐเดจเดพเดฎเด™เตเด™เดณเตเด‚ เด•เต‚เดŸเดพเดคเต†/เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดŽเตปเดตเดฏเต‹เตบเดฎเต†เดจเตเดฑเต เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเตเด•เดณเตเด‚ เดจเดฟเตผเดตเดšเดฟเด•เตเด•เตเดจเตเดจเดคเต เดธเดพเดงเดพเดฐเดฃเดฎเดพเดฃเต, เดชเดคเดฟเดตเดพเดฏเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจ เด•เดฎเดพเตปเดกเตเด•เตพเด•เตเด•เดพเดฏเดฟ เดธเตเดฅเดฟเดฐเดธเตเดฅเดฟเดคเดฟ เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เตพ เดธเดœเตเดœเดฎเดพเด•เตเด•เตเดจเตเดจเต (เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, alias ls=ls -AFh เด…เดฅเดตเดพ export LESS=-i). เด’เดฐเต เดจเต‹เตบ-เด‡เดจเตเดฑเดฑเดพเด•เตเดŸเต€เดตเต เดทเต†เดฒเตเดฒเดฟเดฒเต‚เดŸเต† เดชเตเดฐเต‹เด•เตโ€Œเดธเดฟ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดฑเต† เด’เดฐเต เดชเต‹เดฐเดพเดฏเตเดฎ wsl.exe - เดชเตเดฐเตŠเดซเตˆเดฒเตเด•เตพ เดฒเต‹เดกเต เดšเต†เดฏเตเดคเดฟเดŸเตเดŸเดฟเดฒเตเดฒ, เด…เดคเดฟเดจเดพเตฝ เดˆ เด“เดชเตเดทเดจเตเด•เตพ เดกเดฟเดซเต‹เตพเดŸเตเดŸเดพเดฏเดฟ เดฒเดญเตเดฏเดฎเดฒเตเดฒ (เด…เดคเดพเดฏเดคเต. ls WSL เตฝ เด’เดชเตเดชเด‚ wsl ls เดฎเตเด•เดณเดฟเตฝ เดจเดฟเตผเดตเดšเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เด…เดชเดฐเดจเดพเดฎเดคเตเดคเดฟเตฝ เดตเตเดฏเดคเตเดฏเดธเตเดคเดฎเดพเดฏเดฟ เดชเต†เดฐเตเดฎเดพเดฑเตเด‚).

PowerShell เดจเตฝเด•เตเดจเตเดจเต $PSDefaultParameterValues, เดกเดฟเดซเต‹เตพเดŸเตเดŸเต เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เตพ เดจเดฟเตผเดตเดšเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด’เดฐเต เดธเตเดฑเตเดฑเดพเตปเดกเต‡เตผเดกเต เดฎเต†เด•เตเด•เดพเดจเดฟเดธเด‚, เดŽเดจเตเดจเดพเตฝ cmdlets-เดจเตเด‚ เดตเดฟเดชเตเดฒเดฎเดพเดฏ เดซเด‚เด—เตเดทเดจเตเด•เตพเด•เตเด•เตเด‚ เดฎเดพเดคเตเดฐเด‚. เดคเต€เตผเดšเตเดšเดฏเดพเดฏเตเด‚, เดจเดฎเตเด•เตเด•เต เดžเด™เตเด™เดณเตเดŸเต† เดทเต†เดฒเตเดฒเตเด•เดณเดฟเตฝ เดจเดฟเดจเตเดจเต เดตเดฟเดชเตเดฒเดฎเดพเดฏ เดซเด‚เด—เตโ€Œเดทเดจเตเด•เตพ เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚, เดŽเดจเตเดจเดพเตฝ เด‡เดคเต เด…เดจเดพเดตเดถเตเดฏเดฎเดพเดฏ เดธเด™เตเด•เต€เตผเดฃเดคเด•เตพ เด…เดตเดคเดฐเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต (เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, PowerShell เดญเดพเด—เดฟเด• เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเตผ เดชเต‡เดฐเตเด•เตพ เดชเดฐเดธเตเดชเดฐเด‚ เดฌเดจเตเดงเดชเตเดชเต†เดŸเตเดคเตเดคเตเดจเตเดจเต (เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, -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. เดกเดฟเดซเต‹เตพเดŸเตเดŸเต เด•เตเดฐเดฎเต€เด•เดฐเดฃเด™เตเด™เตพ เด•เต‹เตบเดซเดฟเด—เตผ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเดพเดฏเดฟ เดจเดฟเด™เตเด™เดณเตเดŸเต† PowerShell เดชเตเดฐเตŠเดซเตˆเดฒเดฟเดฒเต‡เด•เตเด•เต เดจเดฟเตผเดฆเตเดฆเต‡เดถเด™เตเด™เตพ เดšเต‡เตผเด•เตเด•เตเดจเตเดจเดคเต เดŽเด™เตเด™เดจเต†เดฏเต†เดจเตเดจเต เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจเดต เด•เดพเดฃเดฟเด•เตเด•เตเดจเตเดจเต. เด‡เดชเตเดชเต‹เตพ เดจเดฎเตเด•เตเด•เดคเต เดšเต†เดฏเตเดฏเดพเด‚!

$WslDefaultParameterValues["grep"] = "-E"
$WslDefaultParameterValues["less"] = "-i"
$WslDefaultParameterValues["ls"] = "-AFh --group-directories-first"

เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เตพ เดฎเดพเดคเตƒเด•เดฏเดฟเตฝ เด†เดฏเดคเดฟเดจเดพเตฝ $PSDefaultParameterValues, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด•เดดเดฟเดฏเตเด‚ เด…เดต เดชเตเดฐเดตเตผเดคเตเดคเดจเดฐเดนเดฟเดคเดฎเดพเด•เตเด•เตเดจเตเดจเดคเต เดŽเดณเตเดชเตเดชเดฎเดพเดฃเต เดคเดพเตฝเด•เดพเดฒเดฟเด•เดฎเดพเดฏเดฟ เด•เต€ เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดคเตเด•เตŠเดฃเตเดŸเต "Disabled" เด…เตผเดคเตเดฅเดคเตเดคเดฟเดฒเต‡เด•เตเด•เต $true. เด’เดฐเต เดชเตเดฐเดคเตเดฏเต‡เด• เดนเดพเดทเต เดชเดŸเตเดŸเดฟเด•เดฏเตเดŸเต† เด…เดงเดฟเด• เดจเต‡เดŸเตเดŸเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดจเดฐเดนเดฟเดคเดฎเดพเด•เตเด•เดพเดจเตเดณเตเดณ เด•เดดเดฟเดตเดพเดฃเต $WslDefaultParameterValues เดจเดฟเดจเตเดจเต เดชเตเดฐเดคเตเดฏเต‡เด•เด‚ $PSDefaultParameterValues.

เดตเดพเดฆเด‚ เดชเต‚เตผเดคเตเดคเต€เด•เดฐเดฃเด‚

เด•เดฎเดพเตปเดกเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด†เตผเด—เตเดฏเตเดฎเต†เดจเตเดฑเต เดŸเตเดฐเต†เดฏเดฟเดฒเดฑเตเด•เตพ เดฐเดœเดฟเดธเตเดฑเตเดฑเตผ เดšเต†เดฏเตเดฏเดพเตป PowerShell เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต Register-ArgumentCompleter. เดฌเดพเดทเดฟเดจเต เดถเด•เตเดคเดฟเดฏเตเดฃเตเดŸเต เดชเตเดฐเต‹เด—เตเดฐเดพเด‚ เดšเต†เดฏเตเดฏเดพเดตเตเดจเตเดจ เดฏเดพเดจเตเดคเตเดฐเดฟเด• เดชเต‚เตผเดคเตเดคเต€เด•เดฐเดฃ เด‰เดชเด•เดฐเดฃเด™เตเด™เตพ. PowerShell-เตฝ เดจเดฟเดจเตเดจเต เดฌเดพเดทเต เดตเดฟเดณเดฟเด•เตเด•เดพเตป WSL เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต. เดžเด™เตเด™เดณเตเดŸเต† เดชเดตเตผเดทเต†เตฝ เดซเด‚เด—เตโ€Œเดทเตป เดฑเดพเดชเตเดชเดฑเตเด•เตพเด•เตเด•เดพเดฏเดฟ เด†เตผเด—เตเดฏเตเดฎเต†เดจเตเดฑเต เดชเต‚เตผเดคเตเดคเต€เด•เดฐเดฃเด™เตเด™เตพ เดฐเดœเดฟเดธเตเดฑเตเดฑเตผ เดšเต†เดฏเตเดฏเดพเดจเตเด‚ เดชเต‚เตผเดคเตเดคเต€เด•เดฐเดฃเด™เตเด™เตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดฌเดพเดทเต เด•เต‹เตพ เดšเต†เดฏเตเดฏเดพเดจเตเด‚ เด•เดดเดฟเดฏเตเดฎเต†เด™เตเด•เดฟเตฝ, เดฌเดพเดทเดฟเดจเตเดฑเต† เด…เดคเต‡ เด•เตƒเดคเตเดฏเดคเดฏเต‹เดŸเต† เดจเดฎเตเด•เตเด•เต เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏ เด†เตผเด—เตเดฏเตเดฎเต†เดจเตเดฑเต เดชเต‚เตผเดคเตเดคเต€เด•เดฐเดฃเด‚ เดฒเดญเดฟเด•เตเด•เตเด‚!

# 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.
  • เดฌเดพเดทเต เดธเตเดตเดฏเด‚ เดชเต‚เตผเดคเตเดคเต€เด•เดฐเดฃเดคเตเดคเดฟเดจเดพเดฏเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจ เดทเต†เตฝ เดซเด‚เด—เตโ€Œเดทเดจเดฟเดฒเต‡เด•เตเด•เต เดžเด™เตเด™เตพ เด“เดฐเต‹ เด•เดฎเดพเตปเดกเตเด‚ เดฎเดพเดชเตเดชเต เดšเต†เดฏเตเดฏเตเดจเตเดจเต (เดฏเดพเดจเตเดคเตเดฐเดฟเด• เดชเต‚เตผเดคเตเดคเต€เด•เดฐเดฃ เดธเดตเดฟเดถเต‡เดทเดคเด•เตพ เดจเดฟเตผเดตเดšเดฟเด•เตเด•เดพเตป, เดฌเดพเดทเต เด‰เดชเดฏเต‹เด—เด™เตเด™เตพ $F, เดŽเดจเตเดจเดคเดฟเดจเตเดฑเต† เดšเตเดฐเตเด•เตเด•เต†เดดเตเดคเตเดคเต complete -F <FUNCTION>).
  • PowerShell เด†เตผเด—เตเดฏเตเดฎเต†เดจเตเดฑเตเด•เตพ เดชเดฐเดฟเดตเตผเดคเตเดคเดจเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต $wordToComplete, $commandAst ะธ $cursorPosition เดธเตเดชเต†เดธเดฟเดซเดฟเด•เตเด•เต‡เดทเดจเตเด•เตพเด•เตเด•เดจเตเดธเดฐเดฟเดšเตเดšเต เดฌเดพเดทเดฟเดจเตเดฑเต† เดธเตเดตเดฏเด‚ เดชเต‚เตผเดคเตเดคเต€เด•เดฐเดฃ เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เตพ เดชเตเดฐเดคเต€เด•เตเดทเดฟเด•เตเด•เตเดจเตเดจ เดซเต‹เตผเดฎเดพเดฑเตเดฑเดฟเดฒเต‡เด•เตเด•เต เดชเตเดฐเต‹เด—เตเดฐเดพเด‚ เดšเต†เดฏเตเดฏเดพเดตเตเดจเตเดจ เดฏเดพเดจเตเดคเตเดฐเดฟเด• เดชเต‚เตผเดคเตเดคเต€เด•เดฐเดฃเด‚ เดฌเดพเดทเต.
  • เด•เตˆเดฎเดพเดฑเดพเตป เดžเด™เตเด™เตพ เด’เดฐเต เด•เดฎเดพเตปเดกเต เดฒเตˆเตป เดฐเดšเดฟเด•เตเด•เตเดจเตเดจเต wsl.exe, เดชเดฐเดฟเดธเตเดฅเดฟเดคเดฟ เดถเดฐเดฟเดฏเดพเดฏเดฟ เดธเดœเตเดœเต€เด•เดฐเดฟเดšเตเดšเดฟเดŸเตเดŸเตเดฃเตเดŸเต†เดจเตเดจเต เด‰เดฑเดชเตเดชเดพเด•เตเด•เตเด•เดฏเตเด‚ เด‰เดšเดฟเดคเดฎเดพเดฏ เด“เดŸเตเดŸเต‹-เด•เด‚เดชเตเดฒเต€เดทเตป เดซเด‚เด—เตโ€Œเดทเดจเต† เดตเดฟเดณเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดซเดฒเด™เตเด™เตพ เดฒเตˆเตป-เดฌเตˆ-เดฒเตˆเตป เดซเดพเดทเดจเดฟเตฝ เด”เดŸเตเดŸเตโ€ŒเดชเตเดŸเตเดŸเต เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต.
  • เด…เดชเตเดชเต‹เตพ เดžเด™เตเด™เตพ เดตเดฟเดณเดฟเด•เตเด•เตเดจเตเดจเต wsl เด•เดฎเดพเตปเดกเต เดฒเตˆเตป เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต, เดฒเตˆเตป เดธเต†เดชเตเดชเดฑเต‡เดฑเตเดฑเดฑเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดžเด™เตเด™เตพ เด”เดŸเตเดŸเตเดชเตเดŸเตเดŸเต เดตเต‡เตผเดคเดฟเดฐเดฟเดšเตเดšเต เด“เดฐเต‹เดจเตเดจเดฟเดจเตเด‚ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเต CompletionResults, เด…เดตเดฏเต† เด…เดŸเตเด•เตเด•เตเด•เดฏเตเด‚ เดธเตโ€Œเดชเต†เดฏเตโ€Œเดธเตเด•เดณเตเด‚ เดชเดฐเดพเตปเดคเต€เดธเดฟเดธเตเด‚ เดชเต‹เดฒเตเดณเตเดณ เดชเตเดฐเดคเต€เด•เด™เตเด™เดณเดฟเตฝ เดจเดฟเดจเตเดจเต เดฐเด•เตเดทเดชเตเดชเต†เดŸเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต, เด…เดคเต เดคเต†เดฑเตเดฑเดพเดฏเดฟ เดตเตเดฏเดพเด–เตเดฏเดพเดจเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเด‚.

เดคเตฝเดซเดฒเดฎเดพเดฏเดฟ, เดžเด™เตเด™เดณเตเดŸเต† Linux เด•เดฎเดพเตปเดกเต เดทเต†เดฒเตเดฒเตเด•เตพ เดฌเดพเดทเดฟเดจเตเดฑเต† เด…เดคเต‡ เดธเตเดตเดฏเด‚ เดชเต‚เตผเดคเตเดคเต€เด•เดฐเดฃเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด‚! เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต:

  • ssh -c <TAB> -J <TAB> -m <TAB> -O <TAB> -o <TAB> -Q <TAB> -w <TAB> -b <TAB>

เด“เดฐเต‹ เดธเตเดตเดฏเด‚ เดชเต‚เตผเดคเตเดคเต€เด•เดฐเดฃเดตเตเด‚ เดฎเตเดฎเตเดชเดคเตเดคเต† เด†เตผเด—เตเดฏเตเดฎเต†เดจเตเดฑเดฟเดจเต เดชเตเดฐเดคเตเดฏเต‡เด• เดฎเต‚เดฒเตเดฏเด™เตเด™เตพ เดจเตฝเด•เตเดจเตเดจเต, WSL-เตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เด…เดฑเดฟเดฏเดชเตเดชเต†เดŸเตเดจเตเดจ เดนเต‹เดธเตเดฑเตเดฑเตเด•เตพ เดชเต‹เดฒเตเดณเตเดณ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดกเดพเดฑเตเดฑ เดตเดพเดฏเดฟเด•เตเด•เตเดจเตเดจเต!

<TAB> เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เดณเดฟเดฒเต‚เดŸเต† เดธเตˆเด•เตเด•เดฟเตพ เดšเต†เดฏเตเดฏเตเด‚. <Ctrl + ะฟั€ะพะฑะตะป> เดฒเดญเตเดฏเดฎเดพเดฏ เดŽเดฒเตเดฒเดพ เด“เดชเตเดทเดจเตเด•เดณเตเด‚ เด•เดพเดฃเดฟเด•เตเด•เตเด‚.

เด•เต‚เดŸเดพเดคเต†, เดžเด™เตเด™เตพเด•เตเด•เต เด‡เดชเตเดชเต‹เตพ เดฌเดพเดทเต เดธเตเดตเดฏเดฎเต‡เดต เดชเต‚เตผเดคเตเดคเต€เด•เดฐเดฃเด‚ เด‰เดณเตเดณเดคเดฟเดจเดพเตฝ, เดจเดฟเด™เตเด™เตพเด•เตเด•เต PowerShell-เตฝ เดจเต‡เดฐเดฟเดŸเตเดŸเต Linux เดชเดพเดคเตเดคเตเด•เตพ เดธเตเดตเดฏเด‚ เดชเต‚เตผเดคเตเดคเดฟเดฏเดพเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚!

  • less /etc/<TAB>
  • ls /usr/share/<TAB>
  • vim ~/.bash<TAB>

เดฌเดพเดทเต เดฏเดพเดจเตเดคเตเดฐเดฟเด• เดชเต‚เตผเดคเตเดคเต€เด•เดฐเดฃเด‚ เดซเดฒเด™เตเด™เดณเตŠเดจเตเดจเตเด‚ เด‰เดฃเตเดŸเดพเด•เตเด•เดพเดคเตเดค เดธเดจเตเดฆเตผเดญเด™เตเด™เดณเดฟเตฝ, เดชเดตเตผเดทเต†เตฝ เดธเดฟเดธเตเดฑเตเดฑเด‚ เดกเดฟเดซเต‹เตพเดŸเตเดŸเต เดตเดฟเตปเดกเต‹เดธเต เดชเดพเดคเตเดคเตเด•เดณเดฟเดฒเต‡เด•เตเด•เต เดฎเดŸเด™เตเด™เตเดจเตเดจเต. เด…เดคเดฟเดจเดพเตฝ, เดชเตเดฐเดพเดฏเต‹เด—เดฟเด•เดฎเดพเดฏเดฟ, เดจเดฟเด™เตเด™เดณเตเดŸเต† เดตเดฟเดตเต‡เดšเดจเดพเดงเดฟเด•เดพเดฐเดคเตเดคเดฟเตฝ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดฐเดฃเตเดŸเต เดชเดพเดคเด•เดณเตเด‚ เด’เดฐเต‡เดธเดฎเดฏเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเด‚.

เดคเต€เดฐเตเดฎเดพเดจเด‚

เดชเดตเตผเดทเต†เตฝ, เดกเดฌเตเดฒเตเดฏเตเดŽเดธเตเดŽเตฝ เดŽเดจเตเดจเดฟเดต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต, เดจเดฎเตเด•เตเด•เต เดฒเดฟเดจเด•เตเดธเต เด•เดฎเดพเตปเดกเตเด•เตพ เดตเดฟเตปเดกเต‹เดธเดฟเดฒเต‡เด•เตเด•เต เดจเต‡เดฑเตเดฑเต€เดตเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เดณเดพเดฏเดฟ เดธเด‚เดฏเต‹เดœเดฟเดชเตเดชเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚. Win32 เดฌเดฟเตฝเดกเตเด•เตพ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดฒเดฟเดจเด•เตเดธเต เดฏเต‚เดŸเตเดŸเดฟเดฒเดฟเดฑเตเดฑเดฟเด•เตพเด•เตเด•เดพเดฏเดฟ เดคเดฟเดฐเดฏเตเด•เดฏเต‹ เดฒเดฟเดจเด•เตเดธเต เดทเต†เดฒเตเดฒเดฟเดฒเต‡เด•เตเด•เต เดชเต‹เดฏเดฟ เดจเดฟเด™เตเด™เดณเตเดŸเต† เดตเตผเด•เตเด•เตเดซเตเดฒเต‹ เดคเดŸเดธเตเดธเดชเตเดชเต†เดŸเตเดคเตเดคเตเด•เดฏเต‹ เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸเดคเดฟเดฒเตเดฒ. เดตเต†เดฑเตเด‚ WSL เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเตเด•, เด•เต‹เตบเดซเดฟเด—เตผ เดšเต†เดฏเตเดฏเตเด• เดชเดตเตผเดทเต†เตฝ เดชเตเดฐเตŠเดซเตˆเตฝ ะธ เดจเดฟเด™เตเด™เตพ เด‡เดฑเด•เตเด•เตเดฎเดคเดฟ เดšเต†เดฏเตเดฏเดพเตป เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจ เด•เดฎเดพเตปเดกเตเด•เตพ เดฒเดฟเดธเตเดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเด•! เดฒเดฟเดจเด•เตเดธเต, เดตเดฟเตปเดกเต‹เดธเต เด•เดฎเดพเตปเดกเต เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เตพเด•เตเด•เตเด‚ เดซเดฏเตฝ เดชเดพเดฅเตเด•เตพเด•เตเด•เตเดฎเตเดณเตเดณ เดฑเดฟเดšเตเดšเต เดธเตเดตเดฏเดฎเต‡เดต เดชเต‚เตผเดคเตเดคเต€เด•เดฐเดฃเด‚ เด‡เดจเตเดจเต เดจเต‡เดฑเตเดฑเต€เดตเต เดตเดฟเตปเดกเต‹เดธเต เด•เดฎเดพเตปเดกเตเด•เดณเดฟเตฝ เดชเต‹เดฒเตเด‚ เดฒเดญเตเดฏเดฎเดฒเตเดฒเดพเดคเตเดค เดชเตเดฐเดตเตผเดคเตเดคเดจเดฎเดพเดฃเต.

เดฎเตเด•เดณเดฟเตฝ เดตเดฟเดตเดฐเดฟเดšเตเดš เดฎเตเดดเตเดตเตป เดธเต‹เดดเตโ€Œเดธเต เด•เต‹เดกเตเด‚ เด…เดคเต เดจเดฟเด™เตเด™เดณเตเดŸเต† เดตเตผเด•เตเด•เตเดซเตเดฒเต‹เดฏเดฟเตฝ เด‰เตพเดชเตเดชเต†เดŸเตเดคเตเดคเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด…เดงเดฟเด• เดฎเดพเตผเด—เตเด—เดจเดฟเตผเดฆเตเดฆเต‡เดถเด™เตเด™เดณเตเด‚ เดฒเดญเตเดฏเดฎเดพเดฃเต เด‡เดตเดฟเดŸเต†.

เดเดคเต Linux เด•เดฎเดพเตปเดกเตเด•เดณเดพเดฃเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดเดฑเตเดฑเดตเตเด‚ เด‰เดชเดฏเต‹เด—เดชเตเดฐเดฆเดฎเต†เดจเตเดจเต เดคเต‹เดจเตเดจเตเดจเตเดจเดคเต? เดตเดฟเตปเดกเต‹เดธเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ เดฎเดฑเตเดฑเต เดŽเดจเตเดคเต เดธเดพเดงเดพเดฐเดฃ เด•เดพเดฐเตเดฏเด™เตเด™เตพ เด•เดพเดฃเตเดจเตเดจเดฟเดฒเตเดฒ? เด…เดญเดฟเดชเตเดฐเดพเดฏเด™เตเด™เดณเดฟเตฝ เดŽเดดเตเดคเตเด• เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ GitHub-เตฝ!

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•