เบเบฒเบ™เบฅเบงเบกเป€เบญเบปเบฒเบ„เปเบฒเบชเบฑเปˆเบ‡ Linux เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ Windows เป‚เบ”เบเปƒเบŠเป‰ PowerShell เปเบฅเบฐ WSL

เบ„เปเบฒเบ–เบฒเบกเบ›เบปเบเบเบฐเบ•เบดเบˆเบฒเบเบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒ Windows: "เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบเบฑเบ‡เบšเปเปˆเบกเบต <ะ’ะกะขะะ’ะฌะขะ• ะขะฃะข ะ›ะฎะ‘ะ˜ะœะฃะฎ ะšะžะœะะะ”ะฃ LINUX>?. เบšเปเปˆเบงเปˆเบฒเบˆเบฐเป€เบ›เบฑเบ™เบเบฒเบ™เบ›เบฑเบ”เบ—เบตเปˆเบกเบตเบญเปเบฒเบ™เบฒเบ” less เบซเบผเบทเป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ—เบตเปˆเบ„เบธเป‰เบ™เป€เบ„เบตเบ grep เบซเบผเบท sed, เบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒ Windows เบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบซเบฒเบ„เปเบฒเบชเบฑเปˆเบ‡เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เป„เบ”เป‰เบ‡เปˆเบฒเบเปƒเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ›เบฐเบˆเปเบฒเบงเบฑเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ.

เบฅเบฐเบšเบปเบšเบเปˆเบญเบ Windows เบชเปเบฒเบฅเบฑเบš Linux (WSL) เป„เบ”เป‰เบกเบตเบšเบฒเบ”เบเป‰เบฒเบงเบญเบฑเบ™เปƒเบซเบเปˆเบซเบผเบงเบ‡เปƒเบ™เป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰. เบกเบฑเบ™เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป‚เบ—เบซเบฒเบ„เปเบฒเบชเบฑเปˆเบ‡ Linux เบˆเบฒเบ Windows เป‚เบ”เบเบเบฒเบ™เป€เบ›เบฑเบ™เบ•เบปเบงเปเบ—เบ™เปƒเบซเป‰เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบœเปˆเบฒเบ™ wsl.exe (เบ•เบปเบงเบขเปˆเบฒเบ‡: wsl ls). เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™, เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ™เบตเป‰เบ—เบปเบ™เบ—เบธเบเบˆเบฒเบเบˆเปเบฒเบ™เบงเบ™เบ‚เปเป‰เป€เบชเบ.

  • เบ™เบญเบโ€‹เบˆเบฒเบโ€‹เบ™เบฑเป‰เบ™โ€‹เบขเบนเปˆโ€‹เบ—เบปเปˆเบงโ€‹เบ—เบธเบโ€‹เปเบซเปˆเบ‡โ€‹ wsl เป€เบกเบทเปˆเบญเบเปเบฅเบฐเบœเบดเบ”เบ—เปเบฒเบกเบฐเบŠเบฒเบ”.
  • เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡ Windows เปƒเบ™เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบšเปเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเบชเบฐ เป€เปเบต เป€เบžเบฒเบฐเบงเปˆเบฒ backslashes เบ–เบทเบเบ•เบตเบ„เบงเบฒเบก เปเบฒเบ เบงเปˆเบฒเบ•เบปเบง เปœเบฑเบ‡ เบชเบทเบซเบฅเบปเบš เปœเบต เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเบ•เบปเบงเปเบเบเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต.
  • เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡ Windows เปƒเบ™เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบšเปเปˆเป„เบ”เป‰เปเบ›เป€เบ›เบฑเบ™เบˆเบธเบ”เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™เปƒเบ™ WSL.
  • เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบšเปเปˆเบ–เบทเบเป€เบ„เบปเบฒเบฅเบปเบšเปƒเบ™เป‚เบ›เบฃเป„เบŸเบฅเปŒ WSL เบ—เบตเปˆเบกเบตเบ™เบฒเบกเปเบเบ‡ เปเบฅเบฐเบ•เบปเบงเปเบ›เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก.
  • เบšเปเปˆเบฎเบญเบ‡เบฎเบฑเบšเบเบฒเบ™เบชเปเบฒเป€เบฅเบฑเบ”เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡ Linux.
  • เบšเปเปˆเบฎเบญเบ‡เบฎเบฑเบšเบเบฒเบ™เบชเปเบฒเป€เบฅเบฑเบ”เบ„เปเบฒเบชเบฑเปˆเบ‡.
  • เบšเปเปˆเบฎเบญเบ‡เบฎเบฑเบšเบเบฒเบ™เบชเบณเป€เบฅเบฑเบ”เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ„เปเบฒเบชเบฑเปˆเบ‡ Linux เป„เบ”เป‰เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบ„เบทเบเบฑเบšเบžเบปเบ™เบฅเบฐเป€เบกเบทเบญเบ‡เบŠเบฑเป‰เบ™เบ—เบตเบชเบญเบ‡เบžเบฒเบเปƒเบ•เป‰ Windows - เปเบฅเบฐเบกเบตเบ„เบงเบฒเบกเบซเบเบธเป‰เบ‡เบเบฒเบเปƒเบ™เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบซเบผเบฒเบเบเปˆเบงเบฒเบ„เปเบฒเบชเบฑเปˆเบ‡เบžเบทเป‰เบ™เป€เบกเบทเบญเบ‡. เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เปƒเบซเป‰เบชเบดเบ”เบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเป€เบ—เบปเปˆเบฒเบ—เบฝเบกเบเบฑเบ™, เบกเบฑเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบ—เบตเปˆเป„เบ”เป‰เบฅเบฐเบšเบธเป„เบงเป‰.

เบ•เบปเบงเบซเปเปˆเบŸเบฑเบ‡เบŠเบฑเบ™ PowerShell

เบ”เป‰เบงเบ PowerShell function wrappers, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป€เบžเบตเปˆเบกเบเบฒเบ™เบชเปเบฒเป€เบฅเบฑเบ”เบ„เปเบฒเบชเบฑเปˆเบ‡เปเบฅเบฐเบฅเบปเบšเบฅเป‰เบฒเบ‡เบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบชเปเบฒเบฅเบฑเบšเบ„เปเบฒเบ™เปเบฒเบซเบ™เป‰เบฒ wsl, เบเบฒเบ™เปเบ›เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡ Windows เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡ WSL. เบ‚เปเป‰โ€‹เบเปเบฒโ€‹เบ™เบปเบ”โ€‹เบžเบทเป‰เบ™โ€‹เบ–เบฒเบ™โ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เปเบเบฐโ€‹:

  • เบชเปเบฒเบฅเบฑเบšเบ—เบธเบเบ„เปเบฒเบชเบฑเปˆเบ‡ Linux เบ•เป‰เบญเบ‡เบกเบตเบซเบ™เบถเปˆเบ‡ wrapper เบŸเบฑเบ‡เบŠเบฑเบ™เบ—เบตเปˆเบกเบตเบŠเบทเปˆเบ”เบฝเบงเบเบฑเบ™.
  • Shell เบ•เป‰เบญเบ‡เบฎเบฑเบšเบฎเบนเป‰เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡ Windows เบ—เบตเปˆเบœเปˆเบฒเบ™เป€เบ›เบฑเบ™เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เปเบฅเบฐเบ›เปˆเบฝเบ™เป€เบ›เบฑเบ™เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡ WSL.
  • เปเบเบฐเบ„เบงเบ™เป‚เบ—เบซเบฒ wsl เบ”เป‰เบงเบเบ„เปเบฒเบชเบฑเปˆเบ‡ Linux เบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบกเบเบฑเบšเบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เปเปˆเปƒเบ”เบ™เบถเปˆเบ‡เปเบฅเบฐเบ–เปˆเบฒเบเบ—เบญเบ”เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เปƒเบ”เป†เบ—เบตเปˆเบœเปˆเบฒเบ™เป„เบ›เบซเบฒเบซเบ™เป‰เบฒเบ—เบตเปˆ.

เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบฎเบนเบšเปเบšเบšเบ™เบตเป‰เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบเบฑเบšเบ„เปเบฒเบชเบฑเปˆเบ‡เปƒเบ”เป†, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ” abstract เบ„เปเบฒเบ™เบดเบเบฒเบกเบ‚เบญเบ‡ wrappers เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปเบฅเบฐเบชเป‰เบฒเบ‡เปเบšเบšเป€เบ„เบทเปˆเบญเบ™เป„เบซเบงเบˆเบฒเบเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบ„เปเบฒเบชเบฑเปˆเบ‡เบ—เบตเปˆเบˆเบฐเบ™เปเบฒเป€เบ‚เบปเป‰เบฒ.

# 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 เบเปเบฒเบ™เบปเบ”เบ„เปเบฒเบชเบฑเปˆเบ‡เบ™เปเบฒเป€เบ‚เบปเป‰เบฒ. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡ wrapper เบŸเบฑเบ‡เบŠเบฑเบ™เปเบšเบšเป„เบ”เบ™เบฒเบกเบดเบเบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเบ„เบปเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเป‚เบ”เบเปƒเบŠเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡ Invoke-Expression (เป‚เบ”เบเบ—เปเบฒเบญเบดเบ”เป€เบญเบปเบฒเบ™เบฒเบกเปเบเบ‡เบ—เบตเปˆเบˆเบฐเบ‚เบฑเบ”เบเบฑเบšเบŸเบฑเบ‡เบŠเบฑเบ™).

เบŸเบฑเบ‡เบŠเบฑเบ™ iterates เปƒเบ™เป„เบฅเบเบฐเบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡, เบเปเบฒเบ™เบปเบ”เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡ Windows เป‚เบ”เบเปƒเบŠเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡ Split-Path ะธ Test-Pathเปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ›เปˆเบฝเบ™เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เป„เบ›เบชเบนเปˆเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡ WSL. เบžเบงเบเป€เบฎเบปเบฒเปเบฅเปˆเบ™เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบœเปˆเบฒเบ™เบซเบ™เป‰เบฒเบ—เบตเปˆเบœเบนเป‰เบŠเปˆเบงเบ Format-WslArgument, เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบเปเบฒเบ™เบปเบ”เบ•เปเปˆเบกเบฒ. เบกเบฑเบ™เปœเบตเบญเบญเบเบˆเบฒเบเบ•เบปเบงเบญเบฑเบเบชเบญเบ™เบžเบดเป€เบชเบ”เป€เบŠเบฑเปˆเบ™: เบเบฐเบซเบงเปˆเบฒเบ‡ เปเบฅเบฐเบงเบปเบ‡เป€เบฅเบฑเบšเบ—เบตเปˆเบญเบฒเบ”เบˆเบฐเบ–เบทเบเบ•เบตเบ„เบงเบฒเบกเปเบฒเบเบœเบดเบ”.

เบชเบธเบ”เบ—เป‰เบฒเบ, เบžเบงเบเป€เบฎเบปเบฒเบ–เปˆเบฒเบเบ—เบญเบ” wsl เบเบฒเบ™โ€‹เบ›เป‰เบญเบ™โ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™ pipeline เปเบฅเบฐโ€‹เบเบฒเบ™โ€‹เป‚เบ•เป‰โ€‹เบ–เบฝเบ‡โ€‹เบšเบฑเบ™โ€‹เบŠเบตโ€‹เบ„เปเบฒโ€‹เบชเบฑเปˆเบ‡โ€‹เปƒเบ”เป†โ€‹.

เบ”เป‰เบงเบ wrappers เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป‚เบ—เบซเบฒเบ„เปเบฒเบชเบฑเปˆเบ‡ Linux เบ—เบตเปˆเบ—เปˆเบฒเบ™เบกเบฑเบเปƒเบ™เปเบšเบšเบ—เปเบฒเบกเบฐเบŠเบฒเบ”เบซเบผเบฒเบเป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เป€เบžเบตเปˆเบกเบ„เปเบฒเบ™เปเบฒเบซเบ™เป‰เบฒ wsl เปเบฅเบฐโ€‹เป‚เบ”เบโ€‹เบšเปเปˆโ€‹เบกเบตโ€‹เบเบฒเบ™โ€‹เบเบฑเบ‡โ€‹เบงเบปเบ™โ€‹เบเปˆเบฝเบงโ€‹เบเบฑเบšโ€‹เบงเบดโ€‹เบ—เบตโ€‹เบเบฒเบ™โ€‹เบ›เปˆเบฝเบ™โ€‹เปเบ›เบ‡โ€‹เป€เบชเบฑเป‰เบ™โ€‹เบ—เบฒเบ‡:

  • man bash
  • less -i $profile.CurrentUserAllHosts
  • ls -Al C:Windows | less
  • grep -Ein error *.log
  • tail -f *.log

เบŠเบธเบ”เบ„เปเบฒเบชเบฑเปˆเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เปเบกเปˆเบ™เบชเบฐเปเบ”เบ‡เบขเบนเปˆเบ™เบตเป‰, เปเบ•เปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡ shell เบชเปเบฒเบฅเบฑเบšเบ„เปเบฒเบชเบฑเปˆเบ‡ Linux เปƒเบ”เบเปเปˆเบ•เบฒเบกเป‚เบ”เบเบเบฒเบ™เป€เบžเบตเปˆเบกเบกเบฑเบ™เปƒเบชเปˆเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เป€เบžเบตเปˆเบกเบฅเบฐเบซเบฑเบ”เบ™เบตเป‰เปƒเบชเปˆเบ‚เบญเบ‡เบ—เปˆเบฒเบ™ เบ‚เปเป‰เบกเบนเบ™ PowerShell, เบ„เปเบฒเบชเบฑเปˆเบ‡เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบˆเบฐเบกเบตเปƒเบซเป‰เบ—เปˆเบฒเบ™เปƒเบ™เบ—เบธเบเป†เป€เบŠเบ”เบŠเบฑเบ™ PowerShell, เบ„เบทเบเบฑเบ™เบเบฑเบšเบ„เปเบฒเบชเบฑเปˆเบ‡เบžเบทเป‰เบ™เป€เบกเบทเบญเบ‡!

เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™

เปƒเบ™ Linux, เบกเบฑเบ™เป€เบ›เบฑเบ™เป€เบฅเบทเปˆเบญเบ‡เบ—เปเบฒเบกเบฐเบ”เบฒเบ—เบตเปˆเบˆเบฐเบเปเบฒเบ™เบปเบ”เบ™เบฒเบกเปเบเบ‡เปเบฅเบฐ / เบซเบผเบทเบ•เบปเบงเปเบ›เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเปƒเบ™เป‚เบ›เบฃเป„เบŸเบฅเปŒเป€เบ‚เบปเป‰เบฒเบชเบนเปˆเบฅเบฐเบšเบปเบš, เบเปเบฒเบ™เบปเบ”เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบชเปเบฒเบฅเบฑเบšเบ„เปเบฒเบชเบฑเปˆเบ‡เบ—เบตเปˆเปƒเบŠเป‰เป€เบฅเบทเป‰เบญเบเป† (เบ•เบปเบงเบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™, alias ls=ls -AFh เบซเบผเบท export LESS=-i). เบซเบ™เบถเปˆเบ‡เปƒเบ™เบ‚เปเป‰เป€เบชเบเบ‚เบญเบ‡ proxying เบœเปˆเบฒเบ™ shell เบ—เบตเปˆเบšเปเปˆเบกเบตเบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบš wsl.exe - เบ—เบตเปˆเป‚เบ›เป„เบŸเบšเปเปˆเป„เบ”เป‰เบ–เบทเบเป‚เบซเบฅเบ”, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ—เบฒเบ‡เป€เบฅเบทเบญเบเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบšเปเปˆเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป„เบ”เป‰เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™ (i.e. ls เปƒเบ™ WSL เปเบฅเบฐ wsl ls เบˆเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบปเบงเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบเบฑเบšเบ™เบฒเบกเปเบเบ‡เบ—เบตเปˆเป„เบ”เป‰เบเปเบฒเบ™เบปเบ”เป„เบงเป‰เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡).

PowerShell เปƒเบซเป‰ $PSDefaultParameterValues, เบเบปเบ™เป„เบเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเปเบฒเบ™เบปเบ”เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เปเบ•เปˆเบžเบฝเบ‡เปเบ•เปˆเบชเปเบฒเบฅเบฑเบš cmdlets เปเบฅเบฐเบซเบ™เป‰เบฒเบ—เบตเปˆเบเป‰เบฒเบงเบซเบ™เป‰เบฒ. เปเบ™เปˆเบ™เบญเบ™, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบซเบ™เป‰เบฒเบ—เบตเปˆเบ‚เบฑเป‰เบ™เบชเบนเบ‡เบญเบญเบเบˆเบฒเบเปเบเบฐเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เปเบ•เปˆเบ™เบตเป‰เปเบ™เบฐเบ™เปเบฒเบญเบฒเบเบฒเบ™เปเบŠเบเบŠเป‰เบญเบ™เบ—เบตเปˆเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™ (เบ•เบปเบงเบขเปˆเบฒเบ‡, PowerShell เบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบŠเบทเปˆเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบšเบฒเบ‡เบชเปˆเบงเบ™ (เบ•เบปเบงเบขเปˆเบฒเบ‡: -a เบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบš -ArgumentList), เป€เบŠเบดเปˆเบ‡เบˆเบฐเบ‚เบฑเบ”เปเบเป‰เบ‡เบเบฑเบšเบ„เปเบฒเบชเบฑเปˆเบ‡ Linux เบ—เบตเปˆเป€เบญเบปเบฒเบŠเบทเปˆเบšเบฒเบ‡เบชเปˆเบงเบ™เป€เบ›เบฑเบ™ arguments), เปเบฅเบฐ syntax เบชเปเบฒเบฅเบฑเบšเบเปเบฒเบ™เบปเบ”เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบˆเบฐเบšเปเปˆเป€เบซเบกเบฒเบฐเบชเบปเบกเบ—เบตเปˆเบชเบธเบ” (เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบŠเบทเปˆเบ‚เบญเบ‡เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเปƒเบ™เบ„เบต, เบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆเบŠเบทเปˆเบ„เปเบฒเบชเบฑเปˆเบ‡) .

เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบ”เป‰เบงเบเบเบฒเบ™เบ”เบฑเบ”เปเบ›เบ‡เป€เบฅเบฑเบเบ™เป‰เบญเบเบ‚เบญเบ‡เปเบเบฐเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบปเบงเปเบšเบšเบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบเบฑเบš $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"

เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เปเบกเปˆเบ™ modeled เบซเบผเบฑเบ‡เบˆเบฒเบ $PSDefaultParameterValues, เป€เบˆเบปเป‰เบฒโ€‹เบชเบฒโ€‹เบกเบฒเบ” เบกเบฑเบ™เบ‡เปˆเบฒเบเบ—เบตเปˆเบˆเบฐเบ›เบดเบ”เบเบฒเบ™เปƒเบŠเป‰เบ‡เบฒเบ™เบžเบงเบเบกเบฑเบ™ เบŠเบปเปˆเบงเบ„เบฒเบงเป‚เบ”เบเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบ„เบต "Disabled" เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ„เบงเบฒเบกเบซเบกเบฒเบ $true. เบœเบปเบ™เบ›เบฐเป‚เบซเบเบ”เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบ‚เบญเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡ hash เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบเปเบกเปˆเบ™เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เบ›เบดเบ”เบเบฒเบ™เปƒเบŠเป‰เบ‡เบฒเบ™ $WslDefaultParameterValues เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบเบˆเบฒเบ $PSDefaultParameterValues.

เบชเบณเป€เบฅเบฑเบ”เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡

PowerShell เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™ trailer argument เป‚เบ”เบเปƒเบŠเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡ Register-ArgumentCompleter. Bash เบกเบตเบญเปเบฒเบ™เบฒเบ” เป€เบ„เบทเปˆเบญเบ‡โ€‹เบกเบทโ€‹เบชเปเบฒโ€‹เป€เบฅเบฑเบ”โ€‹เบญเบฑเบ”โ€‹เบ•เบฐโ€‹เป‚เบ™โ€‹เบกเบฑเบ”โ€‹เบ—เบตเปˆโ€‹เบ•เบฑเป‰เบ‡โ€‹เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹. WSL เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เป‚เบ—เบซเบฒ bash เบˆเบฒเบ PowerShell. เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เบเบฒเบ™เบชเปเบฒเป€เบฅเบฑเบ”เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบชเปเบฒเบฅเบฑเบšเบŠเบธเบ”เบŸเบฑเบ‡เบŠเบฑเบ™ PowerShell เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปเบฅเบฐเป‚เบ—เบซเบฒ bash เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบเบฒเบ™เบชเปเบฒเป€เบฅเบฑเบ”, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบชเปเบฒเป€เบฅเบฑเบ”เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบขเปˆเบฒเบ‡เป€เบ•เบฑเบกเบ—เบตเปˆเบ”เป‰เบงเบเบ„เบงเบฒเบกเปเบกเปˆเบ™เบเปเบฒเบ„เบทเบเบฑเบ™เบเบฑเบš 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]
    }
}

เบฅเบฐเบซเบฑเบ”เปเบกเปˆเบ™เบกเบตเบ„เบงเบฒเบกเบซเบ™เบฒเปเบซเบ™เป‰เบ™เป€เบฅเบฑเบเบ™เป‰เบญเบเป‚เบ”เบเบšเปเปˆเป„เบ”เป‰เป€เบ‚เบปเป‰เบฒเปƒเบˆเบšเบฒเบ‡เบซเบ™เป‰เบฒเบ—เบตเปˆเบžเบฒเบเปƒเบ™เบ‚เบญเบ‡ bash, เปเบ•เปˆเป‚เบ”เบเบžเบทเป‰เบ™เบ–เบฒเบ™เปเบฅเป‰เบงเบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป€เบฎเบฑเบ”เปเบกเปˆเบ™เบ™เบตเป‰:

  • เบเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบ—เบตเปˆเบชเบปเบกเบšเบนเบ™เบ‚เบถเป‰เบ™เบชเปเบฒเบฅเบฑเบš wrappers เบŸเบฑเบ‡เบŠเบฑเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบ—เบฑเบ‡เบซเบกเบปเบ”เป‚เบ”เบเบเบฒเบ™เบœเปˆเบฒเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ $commands เปƒเบ™เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต -CommandName เบเบฒเบ™ Register-ArgumentCompleter.
  • เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡เปเบœเบ™เบ—เบตเปˆเปเบ•เปˆเบฅเบฐเบ„เปเบฒเบชเบฑเปˆเบ‡เบเบฑเบšเบŸเบฑเบ‡เบŠเบฑเบ™ shell เบ—เบตเปˆ 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>

เปเบ•เปˆเบฅเบฐ autocompletion เบชเบฐเบซเบ™เบญเบ‡เบ„เปˆเบฒเบชเบฐเป€เบžเบฒเบฐเบเบฑเบš argument เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ, เบญเปˆเบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป€เบŠเบฑเปˆเบ™ hosts เบ—เบตเปˆเบฎเบนเป‰เบˆเบฑเบเบˆเบฒเบ WSL!

<TAB> เบˆเบฐเบงเบปเบ‡เบˆเบญเบ™เบœเปˆเบฒเบ™เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™. <Ctrl + ะฟั€ะพะฑะตะป> เบˆเบฐเบชเบฐเปเบ”เบ‡เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เบตเปˆเบกเบตเบ—เบฑเบ‡เบซเบกเบปเบ”.

เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบ•เบญเบ™เบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบเบฒเบ™เบ•เบทเปˆเบกเบ‚เปเป‰เบกเบนเบ™เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ” bash, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ•เบทเปˆเบกเบ‚เปเป‰เบกเบนเบ™เปƒเบชเปˆเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡ Linux เป‚เบ”เบเบเบปเบ‡เปƒเบ™ PowerShell!

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

เปƒเบ™โ€‹เบเปโ€‹เบฅเบฐโ€‹เบ™เบตโ€‹เบ—เบตเปˆโ€‹เบเบฒเบ™โ€‹เบ•เบทเปˆเบกโ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบญเบฑเบ”โ€‹เบ•เบฐโ€‹เป‚เบ™โ€‹เบกเบฑเบ” bash เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบœเบปเบ™โ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เปƒเบ”เป†โ€‹, PowerShell เบเบฑเบšโ€‹เบ„เบทเบ™โ€‹เป„เบ›โ€‹เบšเปˆเบญเบ™โ€‹เป€เบชเบฑเป‰เบ™โ€‹เบ—เบฒเบ‡โ€‹เป€เบฅเบตเปˆเบกโ€‹เบ•เบปเป‰เบ™ Windows เบ‚เบญเบ‡โ€‹เบฅเบฐโ€‹เบšเบปเบšโ€‹. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เบ—เบฑเบ‡เบชเบญเบ‡เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™เบ•เบฒเบกเบเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบ‚เบญเบ‡เบ—เปˆเบฒเบ™.

เบชเบฐเบซเบฅเบธเบš

เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ PowerShell เปเบฅเบฐ WSL, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡ Linux เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ Windows เป€เบ›เบฑเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบžเบทเป‰เบ™เป€เบกเบทเบญเบ‡. เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบŠเบญเบเบซเบฒ Win32 builds เบซเบผเบท Linux utilities เบซเบผเบทเบ‚เบฑเบ”เบ‚เบงเบฒเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป‚เบ”เบเบเบฒเบ™เป„เบ›เบ—เบตเปˆ Linux shell. เบžเบฝเบ‡เปเบ•เปˆ เบ•เบดเบ”เบ•เบฑเป‰เบ‡ WSL, เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ เป‚เบ›เบฃเป„เบŸเบฅเปŒ PowerShell ะธ เบšเบญเบเบ„เปเบฒเบชเบฑเปˆเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบ™เปเบฒเป€เบ‚เบปเป‰เบฒ! เบเบฒเบ™เบ•เบทเปˆเบกเบ‚เปเป‰เบกเบนเบ™เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบ—เบตเปˆเบญเบธเบ”เบปเบกเบชเบปเบกเบšเบนเบ™เบชเปเบฒเบฅเบฑเบšเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ„เปเบฒเบชเบฑเปˆเบ‡ Linux เปเบฅเบฐ Windows เปเบฅเบฐเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เป„เบŸเบฅเปŒเปเบกเปˆเบ™เบซเบ™เป‰เบฒเบ—เบตเปˆเบเบฑเบ‡เบšเปเปˆเบกเบตเบขเบนเปˆเปƒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡ Windows เบžเบทเป‰เบ™เป€เบกเบทเบญเบ‡เปƒเบ™เบกเบทเป‰เบ™เบตเป‰.

เบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เป€เบ•เบฑเบกเบ—เบตเปˆเบญเบฐเบ—เบดเบšเบฒเบเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบฅเบงเบกเป€เบญเบปเบฒเบกเบฑเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เบ—เปˆเบฒเบ™, เปเบกเปˆเบ™เบกเบตเบขเบนเปˆ เบ—เบตเปˆเบ™เบตเป‰.

เบ„เปเบฒเบชเบฑเปˆเบ‡ Linux เปƒเบ”เบ—เบตเปˆเบ—เปˆเบฒเบ™เป€เบซเบฑเบ™เบงเปˆเบฒเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบ—เบตเปˆเบชเบธเบ”? เบชเบดเปˆเบ‡เบ—เบปเปˆเบงเป„เบ›เบญเบทเปˆเบ™เป†เบ—เบตเปˆเบ‚เบฒเบ”เบซเบฒเบเป„เบ›เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™ Windows? เบ‚เบฝเบ™เปƒเบ™เบ„เปเบฒเป€เบซเบฑเบ™เบซเบผเบท เปƒเบ™ GitHub!

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™