แž€แžถแžšแžšแžฝแž˜แž”แž‰แŸ’แž…แžผแž›แž–แžถแž€แŸ’แž™แž”แž‰แŸ’แž‡แžถแž›แžธแž“แžปแž…แž‘แŸ…แž€แŸ’แž“แžปแž„ Windows แžŠแŸ„แž™แž”แŸ’แžšแžพ PowerShell แž“แžทแž„ WSL

แžŸแŸ†แžŽแžฝแžšแž’แž˜แŸ’แž˜แžแžถแž–แžธแžขแŸ’แž“แž€แžขแž—แžทแžœแžŒแŸ’แžแž“แŸแžœแžธแž“แžŠแžผแŸ– "แž แŸแžแžปแžขแŸ’แžœแžธแž”แžถแž“แž‡แžถแž“แŸ…แžแŸ‚แž˜แžทแž“แž˜แžถแž“ <ะ’ะกะขะะ’ะฌะขะ• ะขะฃะข ะ›ะฎะ‘ะ˜ะœะฃะฎ ะšะžะœะะะ”ะฃ LINUX>? แžแžถแžแžพแžœแžถแž‡แžถแž€แžถแžšแžขแžผแžŸแžŠแŸแž˜แžถแž“แžฅแž‘แŸ’แž’แžทแž–แž› less แžฌแžงแž”แž€แžšแžŽแŸแžŠแŸ‚แž›แž’แŸ’แž›แžถแž”แŸ‹แžŸแŸ’แž‚แžถแž›แŸ‹ grep แžฌ sed, แžขแŸ’แž“แž€แžขแž—แžทแžœแžŒแŸ’แžแž“แŸ Windows แž…แž„แŸ‹แž”แžถแž“แž—แžถแž–แž„แžถแž™แžŸแŸ’แžšแžฝแž›แž“แŸƒแž–แžถแž€แŸ’แž™แž”แž‰แŸ’แž‡แžถแž‘แžถแŸ†แž„แž“แŸแŸ‡แž“แŸ…แž€แŸ’แž“แžปแž„แž€แžถแžšแž„แžถแžšแž”แŸ’แžšแž…แžถแŸ†แžแŸ’แž„แŸƒแžšแž”แžŸแŸ‹แž–แžฝแž€แž‚แŸแŸ”

แž”แŸ’แžšแž–แŸแž“แŸ’แž’แžšแž„แžœแžธแž“แžŠแžผแžŸแž˜แŸ’แžšแžถแž”แŸ‹แž›แžธแž“แžปแž… (WSL) แž”แžถแž“แž”แŸ„แŸ‡แž‡แŸ†แž แžถแž“แž‘แŸ…แž˜แžปแžแž™แŸ‰แžถแž„แž’แŸ†แž€แŸ’แž“แžปแž„แžšแžฟแž„แž“แŸแŸ‡แŸ” แžœแžถแžขแž“แžปแž‰แŸ’แž‰แžถแžแžฑแŸ’แž™แžขแŸ’แž“แž€แž แŸ…แž–แžถแž€แŸ’แž™แž”แž‰แŸ’แž‡แžถแž›แžธแž“แžปแž…แž–แžธแžœแžธแž“แžŠแžผแžŠแŸ„แž™แž”แŸ’แžšแžผแž€แžŸแŸŠแžธแž–แžฝแž€แžœแžถแžแžถแž˜แžšแž™แŸˆ wsl.exe (แžงแŸ” wsl ls) แž‘แŸ„แŸ‡แž”แžธแž‡แžถแž“แŸแŸ‡แž‚แžบแž‡แžถแž€แžถแžšแž€แŸ‚แž›แž˜แŸ’แžขแž‚แžฝแžšแžฑแŸ’แž™แž€แžแŸ‹แžŸแž˜แŸ’แž‚แžถแž›แŸ‹แž€แŸแžŠแŸ„แž™แž‡แž˜แŸ’แžšแžพแžŸแž“แŸแŸ‡แž‘แž‘แžฝแž›แžšแž„แž“แžผแžœแž‚แžปแžŽแžœแžทแž”แžแŸ’แžแžทแž˜แžฝแž™แž…แŸ†แž“แžฝแž“แŸ”

  • แž€แžถแžšแž”แž“แŸ’แžแŸ‚แž˜แž‚แŸ’แžšแž”แŸ‹แž‘แžธแž€แž“แŸ’แž›แŸ‚แž„ wsl แž’แžปแž‰แž‘แŸ’แžšแžถแž“แŸ‹แž“แžทแž„แžแžปแžŸแž–แžธแž’แž˜แŸ’แž˜แž‡แžถแžแžทแŸ”
  • แž•แŸ’แž›แžผแžœแžšแž”แžŸแŸ‹แžœแžธแž“แžŠแžผแž“แŸ…แž€แŸ’แž“แžปแž„แžขแžถแž‚แžปแž™แž˜แŸ‰แž„แŸ‹แž˜แžทแž“แžแŸ‚แž„แžแŸ‚แžŠแŸ†แžŽแžพแžšแž€แžถแžšแž‘แŸแž–แžธแž–แŸ’แžšแŸ„แŸ‡แžŸแž‰แŸ’แž‰แžถแžแž™แž€แŸ’แžšแŸ„แž™แžแŸ’แžšแžผแžœแž”แžถแž“แž”แž€แžŸแŸ’แžšแžถแž™แžแžถแž‡แžถแžแžฝแžขแž€แŸ’แžŸแžšแžšแžแŸ‹แž‚แŸแž…แž‡แžถแž‡แžถแž„แž€แžถแžšแž”แŸ†แž”แŸ‚แž€แžแžแŸ”
  • แž•แŸ’แž›แžผแžœแžšแž”แžŸแŸ‹แžœแžธแž“แžŠแžผแž“แŸ…แž€แŸ’แž“แžปแž„แžขแžถแž‚แžปแž™แž˜แŸ‰แž„แŸ‹แž˜แžทแž“แžแŸ’แžšแžผแžœแž”แžถแž“แž”แž€แž”แŸ’แžšแŸ‚แž‘แŸ…แž‡แžถแž…แŸ†แžŽแžปแž…แž˜แŸ‰แŸ„แž“แžŠแŸ‚แž›แžแŸ’แžšแžผแžœแž‚แŸ’แž“แžถแž“แŸ…แž€แŸ’แž“แžปแž„ WSL แž‘แŸแŸ”
  • แž€แžถแžšแž€แŸ†แžŽแžแŸ‹แž›แŸ†แž“แžถแŸ†แžŠแžพแž˜แž˜แžทแž“แžแŸ’แžšแžผแžœแž”แžถแž“แž‚แŸ„แžšแž–แž“แŸ…แž€แŸ’แž“แžปแž„แž‘แž˜แŸ’แžšแž„แŸ‹ WSL แžŠแŸ‚แž›แž˜แžถแž“แžˆแŸ’แž˜แŸ„แŸ‡แž€แŸ’แž›แŸ‚แž„แž€แŸ’แž›แžถแž™ แž“แžทแž„แžขแžแŸแžšแž”แžšแžทแžŸแŸ’แžแžถแž“แž‘แŸแŸ”
  • แž€แžถแžšแž”แž‰แŸ’แž…แž”แŸ‹แž•แŸ’แž›แžผแžœแž›แžธแž“แžปแž…แž˜แžทแž“แžแŸ’แžšแžผแžœแž”แžถแž“แž‚แžถแŸ†แž‘แŸ’แžšแž‘แŸแŸ”
  • แž€แžถแžšแž”แŸ†แž–แŸแž‰แž–แžถแž€แŸ’แž™แž”แž‰แŸ’แž‡แžถแž˜แžทแž“แžแŸ’แžšแžผแžœแž”แžถแž“แž‚แžถแŸ†แž‘แŸ’แžšแž‘แŸแŸ”
  • แž€แžถแžšแž”แž‰แŸ’แž…แž”แŸ‹แžขแžถแž‚แžปแž™แž˜แŸ‰แž„แŸ‹แž˜แžทแž“แžแŸ’แžšแžผแžœแž”แžถแž“แž‚แžถแŸ†แž‘แŸ’แžšแž‘แŸแŸ”

แž‡แžถแž›แž‘แŸ’แž’แž•แž› แž–แžถแž€แŸ’แž™แž”แž‰แŸ’แž‡แžถแž›แžธแž“แžปแž…แžแŸ’แžšแžผแžœแž”แžถแž“แž…แžถแžแŸ‹แž‘แžปแž€แžŠแžผแž…แž‡แžถแž–แž›แžšแžŠแŸ’แž‹แž›แŸ†แžŠแžถแž”แŸ‹แž‘แžธแž–แžธแžšแž“แŸ…แž€แŸ’แžšแŸ„แž˜แžœแžธแž“แžŠแžผ แž แžพแž™แž–แžทแž”แžถแž€แž”แŸ’แžšแžพแž‡แžถแž„แž–แžถแž€แŸ’แž™แž”แž‰แŸ’แž‡แžถแžŠแžพแž˜แŸ” แžŠแžพแž˜แŸ’แž”แžธแžฑแŸ’แž™แžŸแŸ’แž˜แžพแž‚แŸ’แž“แžถแž“แžผแžœแžŸแžทแž‘แŸ’แž’แžทแžšแž”แžŸแŸ‹แž–แžฝแž€แž‚แŸ แžœแžถแž…แžถแŸ†แž”แžถแž…แŸ‹แž€แŸ’แž“แžปแž„แž€แžถแžšแžŠแŸ„แŸ‡แžŸแŸ’แžšแžถแž™แž”แž‰แŸ’แž แžถแžŠแŸ‚แž›แž”แžถแž“แžšแžถแž™แž”แž‰แŸ’แž‡แžธแŸ”

แžงแž”แž€แžšแžŽแŸแžšแžปแŸ†แž˜แžปแžแž„แžถแžš PowerShell

แž‡แžถแž˜แžฝแž™แž€แž˜แŸ’แž˜แžœแžทแž’แžธแžšแžปแŸ†แž˜แžปแžแž„แžถแžš PowerShell แž™แžพแž„แžขแžถแž…แž”แž“แŸ’แžแŸ‚แž˜แž€แžถแžšแž”แŸ†แž–แŸแž‰แž–แžถแž€แŸ’แž™แž”แž‰แŸ’แž‡แžถ แž“แžทแž„แž›แžปแž”แž”แŸ†แž”แžถแžแŸ‹แžแž˜แŸ’แžšแžผแžœแž€แžถแžšแžŸแž˜แŸ’แžšแžถแž”แŸ‹แž”แžปแž–แŸ’แžœแž”แž‘ wslแž”แž€แž”แŸ’แžšแŸ‚แž•แŸ’แž›แžผแžœ Windows แž‘แŸ…แž‡แžถแž•แŸ’แž›แžผแžœ WSL แŸ” แžแž˜แŸ’แžšแžผแžœแž€แžถแžšแž˜แžผแž›แžŠแŸ’แž‹แžถแž“แžŸแž˜แŸ’แžšแžถแž”แŸ‹แžŸแŸ‚แž›แŸ–

  • แžŸแž˜แŸ’แžšแžถแž”แŸ‹แžšแžถแž›แŸ‹แž–แžถแž€แŸ’แž™แž”แž‰แŸ’แž‡แžถแž›แžธแž“แžปแž…แžแŸ’แžšแžผแžœแžแŸ‚แž˜แžถแž“แž˜แžปแžแž„แžถแžšแžšแžปแŸ†แž˜แžฝแž™แžŠแŸ‚แž›แž˜แžถแž“แžˆแŸ’แž˜แŸ„แŸ‡แžŠแžผแž…แž‚แŸ’แž“แžถแŸ”
  • แžŸแŸ‚แž›แžแŸ’แžšแžผแžœแžแŸ‚แž‘แž‘แžฝแž›แžŸแŸ’แž‚แžถแž›แŸ‹แž•แŸ’แž›แžผแžœ Windows แžŠแŸ‚แž›แž”แžถแž“แž†แŸ’แž›แž„แž€แžถแžแŸ‹แž‡แžถแžขแžถแž‚แžปแž™แž˜แŸ‰แž„แŸ‹ แž แžพแž™แž”แŸ†แž”แŸ’แž›แŸ‚แž„แžœแžถแž‘แŸ…แž‡แžถแž•แŸ’แž›แžผแžœ 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 (แžŠแŸ„แž™โ€‹แžŠแŸ†แž”แžผแž„โ€‹แž›แžปแž”โ€‹แžˆแŸ’แž˜แŸ„แŸ‡โ€‹แž€แŸ’แž›แŸ‚แž„แž€แŸ’แž›แžถแž™โ€‹แžŽแžถโ€‹แž˜แžฝแž™โ€‹แžŠแŸ‚แž›โ€‹แž“แžนแž„โ€‹แž˜แžถแž“โ€‹แž‡แž˜แŸ’แž›แŸ„แŸ‡โ€‹แž‡แžถแž˜แžฝแž™โ€‹แž˜แžปแžแž„แžถแžš)แŸ”

แž˜แžปแžแž„แžถแžšแž’แŸ’แžœแžพแž˜แŸ’แžแž„แž‘แŸ€แžแž›แžพแžขแžถแž‚แžปแž™แž˜แŸ‰แž„แŸ‹แž”แž“แŸ’แž‘แžถแžแŸ‹แž–แžถแž€แŸ’แž™แž”แž‰แŸ’แž‡แžถ แž€แŸ†แžŽแžแŸ‹แž•แŸ’แž›แžผแžœแžšแž”แžŸแŸ‹ Windows แžŠแŸ„แž™แž”แŸ’แžšแžพแž–แžถแž€แŸ’แž™แž”แž‰แŸ’แž‡แžถ 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

แžŸแŸ†แžŽแžปแŸ†แž“แŸƒแž–แžถแž€แŸ’แž™แž”แž‰แŸ’แž‡แžถแž‡แžถแž˜แžผแž›แžŠแŸ’แž‹แžถแž“แžแŸ’แžšแžผแžœแž”แžถแž“แž”แž„แŸ’แž แžถแž‰แž“แŸ…แž‘แžธแž“แŸแŸ‡ แž”แŸ‰แžปแž“แŸ’แžแŸ‚แžขแŸ’แž“แž€แžขแžถแž…แž”แž„แŸ’แž€แžพแžแžŸแŸ‚แž›แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž–แžถแž€แŸ’แž™แž”แž‰แŸ’แž‡แžถแž›แžธแž“แžปแž…แžŽแžถแž˜แžฝแž™แžŠแŸ„แž™แž‚แŸ’แžšแžถแž“แŸ‹แžแŸ‚แž”แž“แŸ’แžแŸ‚แž˜แžœแžถแž‘แŸ…แž€แŸ’แž“แžปแž„แž”แž‰แŸ’แž‡แžธแŸ” แž”แŸ’แžšแžŸแžทแž“แž”แžพแžขแŸ’แž“แž€แž”แž“แŸ’แžแŸ‚แž˜แž›แŸแžแž€แžผแžŠแž“แŸแŸ‡แž‘แŸ…แž€แŸ’แž“แžปแž„แžšแž”แžŸแŸ‹แžขแŸ’แž“แž€แŸ” แž”แŸ’แžšแžœแžแŸ’แžแžทแžšแžผแž” PowerShell แž–แžถแž€แŸ’แž™โ€‹แž”แž‰แŸ’แž‡แžถโ€‹แž‘แžถแŸ†แž„โ€‹แž“แŸแŸ‡โ€‹แž“แžนแž„โ€‹แž˜แžถแž“โ€‹แžŸแž˜แŸ’แžšแžถแž”แŸ‹โ€‹แžขแŸ’แž“แž€โ€‹แž“แŸ…โ€‹แž€แŸ’แž“แžปแž„โ€‹แžšแžถแž›แŸ‹โ€‹แžœแž‚แŸ’แž‚ PowerShell แžŠแžผแž…โ€‹แž“แžนแž„โ€‹แž–แžถแž€แŸ’แž™โ€‹แž”แž‰แŸ’แž‡แžถโ€‹แžŠแžพแž˜โ€‹แžŠแŸ‚แžš!

แž€แŸ†แžŽแžแŸ‹โ€‹แž›แŸ†แž“แžถแŸ†แžŠแžพแž˜

แž“แŸ…แž€แŸ’แž“แžปแž„แž›แžธแž“แžปแž… แžœแžถแž‡แžถแžšแžฟแž„แž’แž˜แŸ’แž˜แžแžถแž€แŸ’แž“แžปแž„แž€แžถแžšแž€แŸ†แžŽแžแŸ‹แžˆแŸ’แž˜แŸ„แŸ‡แž€แŸ’แž›แŸ‚แž„แž€แŸ’แž›แžถแž™ แž“แžทแž„/แžฌแžขแžแŸแžšแž”แžšแžทแžŸแŸ’แžแžถแž“แž“แŸ…แž€แŸ’แž“แžปแž„แž‘แž˜แŸ’แžšแž„แŸ‹แž…แžผแž› แžŠแŸ„แž™แž€แŸ†แžŽแžแŸ‹แž”แŸ‰แžถแžšแŸ‰แžถแž˜แŸ‰แŸ‚แžแŸ’แžšแž›แŸ†แž“แžถแŸ†แžŠแžพแž˜แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž–แžถแž€แŸ’แž™แž”แž‰แŸ’แž‡แžถแžŠแŸ‚แž›แž”แŸ’แžšแžพแž‰แžนแž€แž‰แžถแž”แŸ‹ (แžงแž‘แžถแž แžšแžŽแŸแŸ” alias ls=ls -AFh แžฌ export LESS=-i) แž‚แžปแžŽแžœแžทแž”แžแŸ’แžแžทแž˜แžฝแž™แž“แŸƒแž”แŸ’แžšแžผแž€แžŸแŸŠแžธแžแžถแž˜แžšแž™แŸˆแžŸแŸ‚แž›แžŠแŸ‚แž›แž˜แžทแž“แž˜แžถแž“แžขแž“แŸ’แžแžšแž€แž˜แŸ’แž˜ wsl.exe - แžŠแŸ‚แž›แž‘แž˜แŸ’แžšแž„แŸ‹แž˜แžทแž“แžแŸ’แžšแžผแžœแž”แžถแž“แž•แŸ’แž‘แžปแž€ แžŠแžผแž…แŸ’แž“แŸแŸ‡แž‡แž˜แŸ’แžšแžพแžŸแž‘แžถแŸ†แž„แž“แŸแŸ‡แž˜แžทแž“แž˜แžถแž“แžแžถแž˜แž›แŸ†แž“แžถแŸ†แžŠแžพแž˜แž‘แŸ (แžง. ls แž“แŸ…แž€แŸ’แž“แžปแž„ WSL แž“แžทแž„ wsl ls แž“แžนแž„แž˜แžถแž“แžฅแžšแžทแž™แžถแž”แž‘แžแžปแžŸแž–แžธแžˆแŸ’แž˜แŸ„แŸ‡แž€แŸ’แž›แŸ‚แž„แž€แŸ’แž›แžถแž™แžŠแŸ‚แž›แž”แžถแž“แž€แŸ†แžŽแžแŸ‹แžแžถแž„แž›แžพ)แŸ”

PowerShell แž•แŸ’แžแž›แŸ‹ $PSDefaultParameterValuesแžŠแŸ‚แž›แž‡แžถแž™แž“แŸ’แžแž€แžถแžšแžŸแŸ’แžแž„แŸ‹แžŠแžถแžšแžŸแž˜แŸ’แžšแžถแž”แŸ‹แž€แŸ†แžŽแžแŸ‹แž”แŸ‰แžถแžšแŸ‰แžถแž˜แŸ‰แŸ‚แžแŸ’แžšแž›แŸ†แž“แžถแŸ†แžŠแžพแž˜ แž”แŸ‰แžปแž“แŸ’แžแŸ‚แžŸแž˜แŸ’แžšแžถแž”แŸ‹แžแŸ‚ cmdlets แž“แžทแž„แž˜แžปแžแž„แžถแžšแž€แž˜แŸ’แžšแžทแžแžแŸ’แž–แžŸแŸ‹แž”แŸ‰แžปแžŽแŸ’แžŽแŸ„แŸ‡แŸ” แž‡แžถแž€แžถแžšแž–แžทแžแžŽแžถแžŸแŸ‹ แž™แžพแž„แžขแžถแž…แž”แž„แŸ’แž€แžพแžแž˜แžปแžแž„แžถแžšแž€แž˜แŸ’แžšแžทแžแžแŸ’แž–แžŸแŸ‹แž…แŸแž‰แž–แžธแžŸแŸ‚แž›แžšแž”แžŸแŸ‹แž™แžพแž„ แž”แŸ‰แžปแž“แŸ’แžแŸ‚แž“แŸแŸ‡แžŽแŸ‚แž“แžถแŸ†แž—แžถแž–แžŸแŸ’แž˜แžปแž‚แžŸแŸ’แž˜แžถแž‰แžŠแŸ‚แž›แž˜แžทแž“แž…แžถแŸ†แž”แžถแž…แŸ‹ (แžงแž‘แžถแž แžšแžŽแŸ 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. แžขแžแŸ’แžแž”แŸ’แžšแž™แŸ„แž‡แž“แŸแž”แž“แŸ’แžแŸ‚แž˜แž“แŸƒแžแžถแžšแžถแž„ hash แžŠแžถแž…แŸ‹แžŠแŸ„แž™แžกแŸ‚แž€แž‚แžบแžŸแž˜แžแŸ’แžแž—แžถแž–แž€แŸ’แž“แžปแž„แž€แžถแžšแž”แžทแž‘ $WslDefaultParameterValues แžŠแŸ„แž™แžกแŸ‚แž€แž–แžธแž‚แŸ’แž“แžถแŸ” $PSDefaultParameterValues.

แž€แžถแžšแž”แž‰แŸ’แž…แž”แŸ‹แžขแžถแž‚แžปแž™แž˜แŸ‰แž„แŸ‹

PowerShell แžขแž“แžปแž‰แŸ’แž‰แžถแžแžฑแŸ’แž™แžขแŸ’แž“แž€แž…แžปแŸ‡แžˆแŸ’แž˜แŸ„แŸ‡แžˆแžปแžแžแŸ’แž›แžธแŸ—แžŠแŸ„แž™แž”แŸ’แžšแžพแž–แžถแž€แŸ’แž™แž”แž‰แŸ’แž‡แžถ 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 แž”แŸ‰แžปแž“แŸ’แžแŸ‚แž‡แžถแž˜แžผแž›แžŠแŸ’แž‹แžถแž“แžŠแŸ‚แž›แž™แžพแž„แž’แŸ’แžœแžพแž‚แžบแž“แŸแŸ‡แŸ–

  • แž€แžถแžšแž…แžปแŸ‡แžˆแŸ’แž˜แŸ„แŸ‡แž€แžถแžšแž”แž‰แŸ’แž…แž”แŸ‹แžขแžถแž‚แžปแž™แž˜แŸ‰แž„แŸ‹แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž€แž˜แŸ’แž˜แžœแžทแž’แžธแžšแžปแŸ†แž˜แžปแžแž„แžถแžšแžšแž”แžŸแŸ‹แž™แžพแž„แž‘แžถแŸ†แž„แžขแžŸแŸ‹แžŠแŸ„แž™แž†แŸ’แž›แž„แž€แžถแžแŸ‹แž”แž‰แŸ’แž‡แžธแž˜แžฝแž™แŸ” $commands แž“แŸ…แž€แŸ’แž“แžปแž„แž”แŸ‰แžถแžšแŸ‰แžถแž˜แŸ‰แŸ‚แžแŸ’แžš -CommandName แžŸแž˜แŸ’แžšแžถแž”แŸ‹ Register-ArgumentCompleter.
  • แž™แžพแž„แž‚แžผแžŸแž•แŸ‚แž“แž‘แžธแž–แžถแž€แŸ’แž™แž”แž‰แŸ’แž‡แžถแž“แžธแž˜แžฝแž™แŸ—แž‘แŸ…แž“แžนแž„แž˜แžปแžแž„แžถแžšแžŸแŸ‚แž›แžŠแŸ‚แž› bash แž”แŸ’แžšแžพแžŸแž˜แŸ’แžšแžถแž”แŸ‹แž€แžถแžšแž”แŸ†แž–แŸแž‰แžŠแŸ„แž™แžŸแŸ’แžœแŸแž™แž”แŸ’แžšแžœแžแŸ’แžแžท (แžŠแžพแž˜แŸ’แž”แžธแž€แŸ†แžŽแžแŸ‹แž›แž€แŸ’แžแžŽแŸˆแž”แž…แŸ’แž…แŸแž€แž‘แŸแžŸแž“แŸƒแž€แžถแžšแž”แŸ†แž–แŸแž‰แžŠแŸ„แž™แžŸแŸ’แžœแŸแž™แž”แŸ’แžšแžœแžแŸ’แžแžท bash แž”แŸ’แžšแžพ $F, แžขแž€แŸ’แžŸแžšแž€แžถแžแŸ‹แžŸแž˜แŸ’แžšแžถแž”แŸ‹ complete -F <FUNCTION>).
  • แž€แžถแžšแž”แŸ†แž”แŸ’แž›แŸ‚แž„แžขแžถแž‚แžปแž™แž˜แŸ‰แž„แŸ‹ PowerShell $wordToComplete, $commandAst ะธ $cursorPosition แž…แžผแž›แž‘แŸ…แž€แŸ’แž“แžปแž„แž‘แž˜แŸ’แžšแž„แŸ‹แžŠแŸ‚แž›แžšแŸ†แž–แžนแž„แž‘แžปแž€แžŠแŸ„แž™แž˜แžปแžแž„แžถแžšแž”แŸ†แž–แŸแž‰แžŸแŸ’แžœแŸแž™แž”แŸ’แžšแžœแžแŸ’แžแžทแžšแž”แžŸแŸ‹ 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 แžแŸ’แžšแžกแž”แŸ‹แž‘แŸ…แž•แŸ’แž›แžผแžœแž›แŸ†แž“แžถแŸ†แžŠแžพแž˜แžšแž”แžŸแŸ‹แž”แŸ’แžšแž–แŸแž“แŸ’แž’ Windows แŸ” แžŠแžผแž…แŸ’แž“แŸแŸ‡แž€แŸ’แž“แžปแž„แž€แžถแžšแžขแž“แžปแžœแžแŸ’แž แžขแŸ’แž“แž€แžขแžถแž…แž”แŸ’แžšแžพแž•แŸ’แž›แžผแžœแž‘แžถแŸ†แž„แž–แžธแžšแž€แŸ’แž“แžปแž„แž–แŸแž›แžŠแŸ†แžŽแžถแž›แž‚แŸ’แž“แžถแžแžถแž˜แž€แžถแžšแžŸแŸ†แžšแŸแž…แž…แžทแžแŸ’แžแžšแž”แžŸแŸ‹แžขแŸ’แž“แž€แŸ”

แžŸแŸแž…แž€แŸ’แžแžธแžŸแž“แŸ’แž“แžทแžŠแŸ’แž‹แžถแž“

แžŠแŸ„แž™แž”แŸ’แžšแžพ PowerShell แž“แžทแž„ WSL แž™แžพแž„แžขแžถแž…แž”แž‰แŸ’แž…แžผแž›แž–แžถแž€แŸ’แž™แž”แž‰แŸ’แž‡แžถแž›แžธแž“แžปแž…แž‘แŸ…แž€แŸ’แž“แžปแž„ Windows แž‡แžถแž€แž˜แŸ’แž˜แžœแžทแž’แžธแžŠแžพแž˜แŸ” แž˜แžทแž“แž…แžถแŸ†แž”แžถแž…แŸ‹แžŸแŸ’แžœแŸ‚แž„แžšแž€ Win32 builds แžฌ Linux Utilities แžฌแžšแŸ†แžแžถแž“แžŠแŸ†แžŽแžพแžšแž€แžถแžšแž€แžถแžšแž„แžถแžšแžšแž”แžŸแŸ‹แžขแŸ’แž“แž€แžŠแŸ„แž™แž…แžผแž›แž‘แŸ…แž€แžถแž“แŸ‹ Linux Shell แž“แŸ„แŸ‡แž‘แŸแŸ” แž‚แŸ’แžšแžถแž“แŸ‹แžแŸ‚ แžŠแŸ†แžกแžพแž„ WSL, แž€แŸ†แžŽแžแŸ‹แžšแž…แž“แžถแžŸแž˜แŸ’แž–แŸแž“แŸ’แž’ แž€แž˜แŸ’แžšแž„แž–แŸแžแŸŒแž˜แžถแž“ PowerShell ะธ แžšแžถแž™แž–แžถแž€แŸ’แž™แž”แž‰แŸ’แž‡แžถแžŠแŸ‚แž›แžขแŸ’แž“แž€แž…แž„แŸ‹แž“แžถแŸ†แž…แžผแž›! แž€แžถแžšแž”แŸ†แž–แŸแž‰แžŠแŸ„แž™แžŸแŸ’แžœแŸแž™แž”แŸ’แžšแžœแžแŸ’แžแžทแžŠแŸแžŸแž˜แŸ’แž”แžผแžšแž”แŸ‚แž”แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž”แŸ‰แžถแžšแŸ‰แžถแž˜แŸ‰แŸ‚แžแŸ’แžšแž–แžถแž€แŸ’แž™แž”แž‰แŸ’แž‡แžถแžšแž”แžŸแŸ‹แž›แžธแž“แžปแž… แž“แžทแž„แžœแžธแž“แžŠแžผ แž“แžทแž„แž•แŸ’แž›แžผแžœแžฏแž€แžŸแžถแžšแž‚แžบแž‡แžถแž˜แžปแžแž„แžถแžšแžŠแŸ‚แž›แž˜แžทแž“แž˜แžถแž“แž“แŸ…แž€แŸ’แž“แžปแž„แž–แžถแž€แŸ’แž™แž”แž‰แŸ’แž‡แžถแžœแžธแž“แžŠแžผแžŠแžพแž˜แžŸแž–แŸ’แžœแžแŸ’แž„แŸƒแž“แŸแŸ‡แž‘แŸแŸ”

แž€แžผแžŠแž”แŸ’แžšแž—แž–แž–แŸแž‰แž›แŸแž‰แžŠแŸ‚แž›แž”แžถแž“แž–แžทแž–แžŽแŸŒแž“แžถแžแžถแž„แž›แžพ แž€แŸแžŠแžผแž…แž‡แžถแž‚แŸ„แž›แž€แžถแžšแžŽแŸแžŽแŸ‚แž“แžถแŸ†แž”แž“แŸ’แžแŸ‚แž˜แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž€แžถแžšแž”แž‰แŸ’แž…แžผแž›แžœแžถแž‘แŸ…แž€แŸ’แž“แžปแž„แž›แŸ†แž แžผแžšแž€แžถแžšแž„แžถแžšแžšแž”แžŸแŸ‹แžขแŸ’แž“แž€แž˜แžถแž“ แž“แŸ…แž‘แžธแž“แŸแŸ‡.

แžแžพแž–แžถแž€แŸ’แž™แž”แž‰แŸ’แž‡แžถแž›แžธแž“แžปแž…แž˜แžฝแž™แžŽแžถแžŠแŸ‚แž›แžขแŸ’แž“แž€แž™แž›แŸ‹แžแžถแž˜แžถแž“แž”แŸ’แžšแž™แŸ„แž‡แž“แŸแž”แŸ†แž•แžปแž? แžแžพแž˜แžถแž“แžขแŸ’แžœแžธแž‘แžผแž‘แŸ…แž•แŸ’แžŸแŸแž„แž‘แŸ€แžแžŠแŸ‚แž›แž”แžถแžแŸ‹แž“แŸ…แž–แŸแž›แž’แŸ’แžœแžพแž€แžถแžšแž“แŸ…แž€แŸ’แž“แžปแž„ Windows? แžŸแžšแžŸแŸแžšแž“แŸ…แž€แŸ’แž“แžปแž„แž˜แžแžทแž™แŸ„แž”แž›แŸ‹แžฌ แž“แŸ…แž›แžพ GitHub!

แž”แŸ’แžšแž—แž–: www.habr.com

แž”แž“แŸ’แžแŸ‚แž˜แž˜แžแžทแž™แŸ„แž”แž›แŸ‹