เชชเชพเชตเชฐเชถเซ‡เชฒ เช…เชจเซ‡ เชกเชฌเซเชฒเซเชฏเซเชเชธเชเชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชตเชฟเชจเซเชกเซ‹เชเชฎเชพเช‚ Linux เช†เชฆเซ‡เชถเซ‹เชจเซ‡ เชเช•เซ€เช•เซƒเชค เช•เชฐเชตเซเช‚

เชตเชฟเชจเซเชกเซ‹เช เชกเซ‡เชตเชฒเชชเชฐเซเชธ เชคเชฐเชซเชฅเซ€ เชเช• เชธเชพเชฎเชพเชจเซเชฏ เชชเซเชฐเชถเซเชจ: โ€œเชนเชœเซ เชชเชฃ เช•เซ‡เชฎ เชจเชฅเซ€ <ะ’ะกะขะะ’ะฌะขะ• ะขะฃะข ะ›ะฎะ‘ะ˜ะœะฃะฎ ะšะžะœะะะ”ะฃ LINUX>?. เชญเชฒเซ‡ เชคเซ‡ เชถเช•เซเชคเชฟเชถเชพเชณเซ€ เชธเซเชตเชพเช‡เชช เชนเซ‹เชฏ less เช…เชฅเชตเชพ เชชเชฐเชฟเชšเชฟเชค เชธเชพเชงเชจเซ‹ grep เช…เชฅเชตเชพ sed, เชตเชฟเชจเซเชกเซ‹เช เชกเซ‡เชตเชฒเชชเชฐเซเชธ เชคเซ‡เชฎเชจเชพ เชฐเซ‹เชœเชฟเช‚เชฆเชพ เช•เชพเชฎเชฎเชพเช‚ เช† เช†เชฆเซ‡เชถเซ‹เชจเซ€ เชธเชฐเชณ เชเช•เซเชธเซ‡เชธ เช‡เชšเซเช›เซ‡ เช›เซ‡.

Linux (WSL) เชฎเชพเชŸเซ‡ เชตเชฟเชจเซเชกเซ‹เช เชธเชฌเชธเชฟเชธเซเชŸเชฎ เช† เชฌเชพเชฌเชคเซ‡ เชเช• เชฎเซ‹เชŸเซเช‚ เชชเช—เชฒเซเช‚ เช†เช—เชณ เชตเชงเชพเชฐเซเชฏเซเช‚ เช›เซ‡. เชคเซ‡ เชคเชฎเชจเซ‡ เชตเชฟเชจเซเชกเซ‹เชเชฎเชพเช‚เชฅเซ€ Linux เช†เชฆเซ‡เชถเซ‹เชจเซ‡ เชชเซเชฐเซ‹เช•เซเชธเซ€ เช•เชฐเซ€เชจเซ‡ เช•เซ‰เชฒ เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡ 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 เช†เชฆเซ‡เชถ เชฎเชพเชŸเซ‡ เชคเซ‡เชจเซ‡ เชซเช•เซเชค เชธเซ‚เชšเชฟเชฎเชพเช‚ เช‰เชฎเซ‡เชฐเซ€เชจเซ‡ เชถเซ‡เชฒ เชฌเชจเชพเชตเซ€ เชถเช•เซ‹ เช›เซ‹. เชœเซ‹ เชคเชฎเซ‡ เช† เช•เซ‹เชก เชคเชฎเชพเชฐเชพเชฎเชพเช‚ เช‰เชฎเซ‡เชฐเซ‹ เช›เซ‹ เชชเซเชฐเซ‹เชซเชพเช‡เชฒ PowerShell, เช† เช†เชฆเซ‡เชถเซ‹ เชคเชฎเชพเชฐเชพ เชฎเชพเชŸเซ‡ เชฆเชฐเซ‡เช• เชชเชพเชตเชฐเชถเซ‡เชฒ เชธเชคเซเชฐเชฎเชพเช‚ เช‰เชชเชฒเชฌเซเชง เชฐเชนเซ‡เชถเซ‡, เชฎเซ‚เชณ เช†เชฆเซ‡เชถเซ‹เชจเซ€ เชœเซ‡เชฎ เชœ!

เชฎเซ‚เชณเชญเซ‚เชค เชธเซเชฏเซ‹เชœเชจเซ‹

เชฒเชฟเชจเช•เซเชธเชฎเชพเช‚, เชฒเซ‹เช—เชฟเชจ เชชเซเชฐเซ‹เชซเชพเช‡เชฒเซเชธเชฎเชพเช‚ เช‰เชชเชจเชพเชฎเซ‹ เช…เชจเซ‡/เช…เชฅเชตเชพ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชšเชฒเซ‹เชจเซ‡ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เช•เชฐเชตเซเช‚ เชธเชพเชฎเชพเชจเซเชฏ เช›เซ‡, เชตเชพเชฐเช‚เชตเชพเชฐ เช‰เชชเชฏเซ‹เช—เชฎเชพเช‚ เชฒเซ‡เชตเชพเชคเชพ เช†เชฆเซ‡เชถเซ‹ เชฎเชพเชŸเซ‡ เชกเชฟเชซเซ‰เชฒเซเชŸ เชชเชฐเชฟเชฎเชพเชฃเซ‹ เชธเซ‡เชŸ เช•เชฐเชตเชพ (เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, alias ls=ls -AFh เช…เชฅเชตเชพ export LESS=-i). เชฌเชฟเชจ-เช‡เชจเซเชŸเชฐเซ‡เช•เซเชŸเชฟเชต เชถเซ‡เชฒ เชฆเซเชตเชพเชฐเชพ เชชเซเชฐเซ‹เช•เซเชธเซ€ เช•เชฐเชตเชพเชจเซ‹ เชเช• เช—เซ‡เชฐเชซเชพเชฏเชฆเซ‹ wsl.exe - เช•เซ‡ เชชเซเชฐเซ‹เชซเชพเช‡เชฒเซเชธ เชฒเซ‹เชก เชฅเชฏเซ‡เชฒ เชจเชฅเซ€, เชคเซ‡เชฅเซ€ เช† เชตเชฟเช•เชฒเซเชชเซ‹ เชฎเซ‚เชณเชญเซ‚เชค เชฐเซ€เชคเซ‡ เช‰เชชเชฒเชฌเซเชง เชจเชฅเซ€ (เชฆเชพ.เชค. ls WSL เชฎเชพเช‚ เช…เชจเซ‡ wsl ls เช‰เชชเชฐ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เช‰เชชเชจเชพเชฎ เชธเชพเชฅเซ‡ เช…เชฒเช— เชฐเซ€เชคเซ‡ เชตเชฐเซเชคเซ‡ เช›เซ‡).

เชชเชพเชตเชฐเชถเซ‡เชฒ เชชเซเชฐเชฆเชพเชจ เช•เชฐเซ‡ เช›เซ‡ $PSDefaultParameterValues, เชกเชฟเชซเซ‰เชฒเซเชŸ เชชเชฐเชฟเชฎเชพเชฃเซ‹เชจเซ‡ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชชเซเชฐเชฎเชพเชฃเชญเซ‚เชค เชชเชฆเซเชงเชคเชฟ, เชชเชฐเช‚เชคเซ เชฎเชพเชคเซเชฐ cmdlets เช…เชจเซ‡ เช…เชฆเซเชฏเชคเชจ เช•เชพเชฐเซเชฏเซ‹ เชฎเชพเชŸเซ‡. เช…เชฒเชฌเชคเซเชค, เช…เชฎเซ‡ เช…เชฎเชพเชฐเชพ เชถเซ‡เชฒเซเชธเชฎเชพเช‚เชฅเซ€ เช…เชฆเซเชฏเชคเชจ เช•เชพเชฐเซเชฏเซ‹ เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช, เชชเชฐเช‚เชคเซ เช† เชฌเชฟเชจเชœเชฐเซ‚เชฐเซ€ เช—เซ‚เช‚เชšเชตเชฃเซ‹เชจเซ‹ เชชเชฐเชฟเชšเชฏ เช†เชชเซ‡ เช›เซ‡ (เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชชเชพเชตเชฐเชถเซ‡เชฒ เช†เช‚เชถเชฟเช• เชชเชฐเชฟเชฎเชพเชฃ เชจเชพเชฎเซ‹เชจเซ‡ เชธเชนเชธเช‚เชฌเช‚เชงเชฟเชค เช•เชฐเซ‡ เช›เซ‡ (เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, -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. เชฌเชพเชถ เชถเช•เซเชคเชฟเชถเชพเชณเซ€ เช›เซ‡ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเซ‡เชฌเชฒ เช“เชŸเซ‹-เช•เชฎเซเชชเซเชฒเซ€เชถเชจ เชŸเซ‚เชฒเซเชธ. WSL เชคเชฎเชจเซ‡ PowerShell เชฎเชพเช‚เชฅเซ€ 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 เชจเชพ เชธเซเชตเชคเชƒเชชเซ‚เชฐเซเชฃ เช•เชพเชฐเซเชฏเซ‹ เชฆเซเชตเชพเชฐเชพ เช…เชชเซ‡เช•เซเชทเชฟเชค เชซเซ‹เชฐเซเชฎเซ‡เชŸเชฎเชพเช‚ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเซ‡เชฌเชฒ เชธเซเชตเชคเชƒ-เชชเซ‚เชฐเซเชฃเชคเชพ เชฌเซ‡เชถ
  • เช…เชฎเซ‡ เชŸเซเชฐเชพเชจเซเชธเชซเชฐ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช•เชฎเชพเชจเซเชก เชฒเชพเช‡เชจ เช•เช‚เชชเซ‹เช เช•เชฐเซ€เช เช›เซ€เช 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 เชถเซ‡เชฒเชฎเชพเช‚ เชœเชˆเชจเซ‡ เชคเชฎเชพเชฐเชพ เชตเชฐเซเช•เชซเซเชฒเซ‹เชจเซ‡ เช…เชตเชฐเซ‹เชงเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชจเชฅเซ€. เชฎเชพเชคเซเชฐ WSL เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ‹, เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชฟเชค เช•เชฐเซ‹ เชชเชพเชตเชฐเชถเซ‡เชฒ เชชเซเชฐเซ‹เชซเชพเช‡เชฒ ะธ เชคเชฎเซ‡ เช†เชฏเชพเชค เช•เชฐเชตเชพ เชฎเชพเช‚เช—เซ‹ เช›เซ‹ เชคเซ‡ เช†เชฆเซ‡เชถเซ‹เชจเซ€ เชธเซ‚เชšเชฟ เชฌเชจเชพเชตเซ‹! Linux เช…เชจเซ‡ Windows เช•เชฎเชพเชจเซเชก เชชเซ‡เชฐเชพเชฎเซ€เชŸเชฐเซเชธ เช…เชจเซ‡ เชซเชพเช‡เชฒ เชชเชพเชฅ เชฎเชพเชŸเซ‡ เชธเชฎเซƒเชฆเซเชง เชธเซเชตเชคเชƒเชชเซ‚เชฐเซเชฃเชคเชพ เช เช•เชพเชฐเซเชฏเช•เซเชทเชฎเชคเชพ เช›เซ‡ เชœเซ‡ เช†เชœเซ‡ เชธเซเชฅเชพเชจเชฟเช• Windows เช†เชฆเซ‡เชถเซ‹เชฎเชพเช‚ เชชเชฃ เช‰เชชเชฒเชฌเซเชง เชจเชฅเซ€.

เช‰เชชเชฐ เชตเชฐเซเชฃเชตเซ‡เชฒ เชธเช‚เชชเซ‚เชฐเซเชฃ เชธเซเชฐเซ‹เชค เช•เซ‹เชก, เชคเซ‡เชฎเชœ เชคเซ‡เชจเซ‡ เชคเชฎเชพเชฐเชพ เชตเชฐเซเช•เชซเซเชฒเซ‹เชฎเชพเช‚ เชธเชพเชฎเซ‡เชฒ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชตเชงเชพเชฐเชพเชจเซ€ เชฎเชพเชฐเซเช—เชฆเชฐเซเชถเชฟเช•เชพ เช‰เชชเชฒเชฌเซเชง เช›เซ‡ เช…เชนเซ€เช‚.

เชคเชฎเชจเซ‡ เช•เชฏเชพ Linux เช†เชฆเซ‡เชถเซ‹ เชธเซŒเชฅเซ€ เชตเชงเซ เช‰เชชเชฏเซ‹เช—เซ€ เชฒเชพเช—เซ‡ เช›เซ‡? เชตเชฟเชจเซเชกเซ‹เชเชฎเชพเช‚ เช•เชพเชฎ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ เช…เชจเซเชฏ เช•เชˆ เชธเชพเชฎเชพเชจเซเชฏ เชตเชธเซเชคเซเช“ เช–เซ‚เชŸเซ‡ เช›เซ‡? เชŸเชฟเชชเซเชชเชฃเซ€เช“เชฎเชพเช‚ เชฒเช–เซ‹ เช…เชฅเชตเชพ GitHub เชชเชฐ!

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹