āĻāĻāĻ¨ā§āĻĄā§āĻ āĻŦāĻŋāĻāĻžāĻļāĻāĻžāĻ°ā§āĻĻā§āĻ° āĻāĻžāĻ āĻĨā§āĻā§ āĻāĻāĻāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻĒā§āĻ°āĻļā§āĻ¨: "āĻā§āĻ¨ āĻāĻāĻ¨āĻ āĻ¨ā§āĻ <ĐĐĄĐĸĐĐĐŦĐĸĐ ĐĸĐŖĐĸ ĐĐŽĐĐĐĐŖĐŽ ĐĐĐĐĐĐĐŖ LINUX>
?āĨ¤ āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻļāĻā§āĻ¤āĻŋāĻļāĻžāĻ˛ā§ āĻ¸ā§āĻ¯āĻŧāĻžāĻāĻĒ āĻāĻŋāĻ¨āĻž less
āĻŦāĻž āĻĒāĻ°āĻŋāĻāĻŋāĻ¤ āĻ¸āĻ°āĻā§āĻāĻžāĻŽ grep
āĻŦāĻž sed
, āĻāĻāĻ¨ā§āĻĄā§āĻ āĻĄā§āĻā§āĻ˛āĻĒāĻžāĻ°āĻ°āĻž āĻ¤āĻžāĻĻā§āĻ° āĻĻā§āĻ¨āĻ¨ā§āĻĻāĻŋāĻ¨ āĻāĻžāĻā§ āĻāĻ āĻāĻŽāĻžāĻ¨ā§āĻĄāĻā§āĻ˛āĻŋāĻ° āĻ¸āĻšāĻ āĻ
ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ āĻāĻžāĻ¯āĻŧāĨ¤
wsl.exe
(āĻ¯ā§āĻŽāĻ¨, wsl ls
) āĻ¯āĻĻāĻŋāĻ āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻāĻ˛ā§āĻ˛ā§āĻāĻ¯ā§āĻā§āĻ¯ āĻāĻ¨ā§āĻ¨āĻ¤āĻŋ, āĻāĻ āĻŦāĻŋāĻāĻ˛ā§āĻĒāĻāĻŋ āĻŦāĻŋāĻāĻŋāĻ¨ā§āĻ¨ āĻ
āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻ° āĻ¸āĻŽā§āĻŽā§āĻā§āĻ¨ āĻšāĻ¯āĻŧāĨ¤
- āĻ¸āĻ°ā§āĻŦāĻŦā§āĻ¯āĻžāĻĒā§ āĻ¸āĻāĻ¯ā§āĻāĻ¨
wsl
āĻā§āĻ˛āĻžāĻ¨ā§āĻ¤āĻŋāĻāĻ° āĻāĻŦāĻ āĻ āĻĒā§āĻ°āĻžāĻā§āĻ¤āĨ¤ - āĻāĻ°ā§āĻā§āĻŽā§āĻ¨ā§āĻā§ āĻāĻāĻ¨ā§āĻĄā§āĻ āĻĒāĻžāĻĨ āĻ¸āĻŦāĻ¸āĻŽāĻ¯āĻŧ āĻāĻžāĻ āĻāĻ°ā§ āĻ¨āĻž āĻāĻžāĻ°āĻŖ āĻŦā§āĻ¯āĻžāĻāĻ¸ā§āĻ˛ā§āĻ¯āĻžāĻļāĻā§āĻ˛āĻŋāĻā§ āĻĄāĻŋāĻ°ā§āĻā§āĻāĻ°ā§ āĻŦāĻŋāĻāĻžāĻāĻ āĻ¨āĻž āĻāĻ°ā§ āĻĒāĻžāĻ˛āĻžāĻ¨ā§āĻ° āĻ āĻā§āĻˇāĻ° āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻŦā§āĻ¯āĻžāĻā§āĻ¯āĻž āĻāĻ°āĻž āĻšāĻ¯āĻŧāĨ¤
- āĻāĻ°ā§āĻā§āĻŽā§āĻ¨ā§āĻā§ āĻāĻāĻ¨ā§āĻĄā§āĻ āĻĒāĻžāĻĨ WSL-āĻāĻ° āĻ¸āĻāĻļā§āĻ˛āĻŋāĻˇā§āĻ āĻŽāĻžāĻāĻ¨ā§āĻ āĻĒāĻ¯āĻŧā§āĻ¨ā§āĻā§ āĻ āĻ¨ā§āĻŦāĻžāĻĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧ āĻ¨āĻžāĨ¤
- āĻāĻĒāĻ¨āĻžāĻŽ āĻāĻŦāĻ āĻĒāĻ°āĻŋāĻŦā§āĻļ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ āĻ¸āĻš WSL āĻĒā§āĻ°ā§āĻĢāĻžāĻāĻ˛ā§ āĻĄāĻŋāĻĢāĻ˛ā§āĻ āĻ¸ā§āĻāĻŋāĻāĻ¸ āĻ¸āĻŽā§āĻŽāĻžāĻ¨āĻŋāĻ¤ āĻšāĻ¯āĻŧ āĻ¨āĻžāĨ¤
- Linux āĻĒāĻžāĻĨ āĻ¸āĻŽāĻžāĻĒā§āĻ¤āĻŋ āĻ¸āĻŽāĻ°ā§āĻĨāĻŋāĻ¤ āĻ¨āĻ¯āĻŧāĨ¤
- āĻāĻŽāĻžāĻ¨ā§āĻĄ āĻ¸āĻŽāĻžāĻĒā§āĻ¤āĻŋ āĻ¸āĻŽāĻ°ā§āĻĨāĻŋāĻ¤ āĻ¨āĻ¯āĻŧāĨ¤
- āĻ¯ā§āĻā§āĻ¤āĻŋ āĻ¸āĻŽāĻžāĻĒā§āĻ¤āĻŋ āĻ¸āĻŽāĻ°ā§āĻĨāĻŋāĻ¤ āĻ¨āĻ¯āĻŧ.
āĻĢāĻ˛āĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻ˛āĻŋāĻ¨āĻžāĻā§āĻ¸ āĻāĻŽāĻžāĻ¨ā§āĻĄāĻā§āĻ˛āĻŋāĻā§ āĻāĻāĻ¨ā§āĻĄā§āĻ-āĻāĻ° āĻ āĻ§ā§āĻ¨ā§ āĻĻā§āĻŦāĻŋāĻ¤ā§āĻ¯āĻŧ āĻļā§āĻ°ā§āĻŖā§āĻ° āĻ¨āĻžāĻāĻ°āĻŋāĻā§āĻ° āĻŽāĻ¤ā§ āĻŦāĻŋāĻŦā§āĻāĻ¨āĻž āĻāĻ°āĻž āĻšāĻ¯āĻŧ-āĻāĻŦāĻ āĻ¨ā§āĻāĻŋāĻ āĻāĻŽāĻžāĻ¨ā§āĻĄā§āĻ° āĻā§āĻ¯āĻŧā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻāĻ°āĻ āĻāĻ āĻŋāĻ¨āĨ¤ āĻ¤āĻžāĻĻā§āĻ° āĻ āĻ§āĻŋāĻāĻžāĻ° āĻ¸āĻŽāĻžāĻ¨ āĻāĻ°āĻ¤ā§, āĻ¤āĻžāĻ˛āĻŋāĻāĻžāĻā§āĻā§āĻ¤ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻā§āĻ˛āĻŋ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻāĻ°āĻž āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨āĨ¤
āĻĒāĻžāĻāĻ¯āĻŧāĻžāĻ°āĻļā§āĻ˛ āĻĢāĻžāĻāĻļāĻ¨ āĻ°ā§āĻ¯āĻžāĻĒāĻžāĻ°
PowerShell āĻĢāĻžāĻāĻļāĻ¨ āĻ°ā§āĻ¯āĻžāĻĒāĻžāĻ°āĻā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§, āĻāĻŽāĻ°āĻž āĻāĻŽāĻžāĻ¨ā§āĻĄ āĻāĻŽāĻĒā§āĻ˛āĻŋāĻļāĻ¨ āĻ¯ā§āĻ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŋ āĻāĻŦāĻ āĻāĻĒāĻ¸āĻ°ā§āĻā§āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧāĻ¤āĻž āĻĻā§āĻ° āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŋ wsl
, āĻāĻāĻ¨ā§āĻĄā§āĻ āĻĒāĻžāĻĨāĻā§āĻ˛āĻŋāĻā§ WSL āĻĒāĻžāĻĨā§ āĻ
āĻ¨ā§āĻŦāĻžāĻĻ āĻāĻ°āĻž āĻšāĻā§āĻā§āĨ¤ āĻļā§āĻ˛āĻā§āĻ˛āĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻžāĻĨāĻŽāĻŋāĻ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧāĻ¤āĻž:
- āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻ˛āĻŋāĻ¨āĻžāĻā§āĻ¸ āĻāĻŽāĻžāĻ¨ā§āĻĄā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻ āĻ¨āĻžāĻŽā§āĻ° āĻāĻāĻāĻŋ āĻĢāĻžāĻāĻļāĻ¨ āĻŽā§āĻĄāĻŧāĻ āĻĨāĻžāĻāĻ¤ā§ āĻšāĻŦā§āĨ¤
- āĻļā§āĻ˛āĻāĻŋāĻā§ āĻ āĻŦāĻļā§āĻ¯āĻ āĻāĻ°ā§āĻā§āĻŽā§āĻ¨ā§āĻ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻĒāĻžāĻ¸ āĻāĻ°āĻž āĻāĻāĻ¨ā§āĻĄā§āĻ āĻĒāĻžāĻĨāĻā§āĻ˛āĻŋāĻā§ āĻāĻŋāĻ¨āĻ¤ā§ āĻšāĻŦā§ āĻāĻŦāĻ āĻ¸ā§āĻā§āĻ˛āĻŋāĻā§ WSL āĻĒāĻžāĻĨā§ āĻ°ā§āĻĒāĻžāĻ¨ā§āĻ¤āĻ° āĻāĻ°āĻ¤ā§ āĻšāĻŦā§āĨ¤
- āĻļā§āĻ˛ āĻāĻ˛ āĻāĻ°āĻž āĻāĻāĻŋāĻ¤
wsl
āĻ¯ā§āĻā§āĻ¨ āĻĒāĻžāĻāĻĒāĻ˛āĻžāĻāĻ¨ āĻāĻ¨āĻĒā§āĻā§ āĻāĻĒāĻ¯ā§āĻā§āĻ¤ āĻ˛āĻŋāĻ¨āĻžāĻā§āĻ¸ āĻāĻŽāĻžāĻ¨ā§āĻĄ āĻĻāĻŋāĻ¯āĻŧā§ āĻāĻŦāĻ āĻĢāĻžāĻāĻļāĻ¨ā§ āĻĒāĻžāĻ¸ āĻāĻ°āĻž āĻ¯ā§āĻā§āĻ¨ā§ āĻāĻŽāĻžāĻ¨ā§āĻĄ āĻ˛āĻžāĻāĻ¨ āĻāĻ°ā§āĻā§āĻŽā§āĻ¨ā§āĻ āĻĒāĻžāĻ¸ āĻāĻ°āĻžāĨ¤
āĻ¯ā§āĻšā§āĻ¤ā§ āĻāĻ āĻĒā§āĻ¯āĻžāĻāĻžāĻ°ā§āĻ¨āĻāĻŋ āĻ¯ā§āĻā§āĻ¨ā§ āĻāĻŽāĻžāĻ¨ā§āĻĄā§ āĻĒā§āĻ°āĻ¯āĻŧā§āĻ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§, āĻ¤āĻžāĻ āĻāĻŽāĻ°āĻž āĻāĻ āĻŽā§āĻĄāĻŧāĻā§āĻ° āĻ¸āĻāĻā§āĻāĻžāĻāĻŋ āĻŦāĻŋāĻŽā§āĻ°ā§āĻ¤ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŋ āĻāĻŦāĻ āĻāĻŽāĻĻāĻžāĻ¨āĻŋ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻŽāĻžāĻ¨ā§āĻĄā§āĻ° āĻ¤āĻžāĻ˛āĻŋāĻāĻž āĻĨā§āĻā§ āĻāĻ¤āĻŋāĻļā§āĻ˛āĻāĻžāĻŦā§ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŋāĨ¤
# The commands to import.
$commands = "awk", "emacs", "grep", "head", "less", "ls", "man", "sed", "seq", "ssh", "tail", "vim"
# Register a function for each command.
$commands | ForEach-Object { Invoke-Expression @"
Remove-Alias $_ -Force -ErrorAction Ignore
function global:$_() {
for (`$i = 0; `$i -lt `$args.Count; `$i++) {
# If a path is absolute with a qualifier (e.g. C:), run it through wslpath to map it to the appropriate mount point.
if (Split-Path `$args[`$i] -IsAbsolute -ErrorAction Ignore) {
`$args[`$i] = Format-WslArgument (wsl.exe wslpath (`$args[`$i] -replace "", "/"))
# If a path is relative, the current working directory will be translated to an appropriate mount point, so just format it.
} elseif (Test-Path `$args[`$i] -ErrorAction Ignore) {
`$args[`$i] = Format-WslArgument (`$args[`$i] -replace "", "/")
}
}
if (`$input.MoveNext()) {
`$input.Reset()
`$input | wsl.exe $_ (`$args -split ' ')
} else {
wsl.exe $_ (`$args -split ' ')
}
}
"@
}
āĻ¤āĻžāĻ˛āĻŋāĻāĻž $command
āĻāĻŽāĻĻāĻžāĻ¨āĻŋ āĻāĻŽāĻžāĻ¨ā§āĻĄ āĻ¸āĻāĻā§āĻāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻāĻ°ā§āĨ¤ āĻ¤āĻžāĻ°āĻĒāĻ° āĻāĻŽāĻ°āĻž āĻāĻŽāĻžāĻ¨ā§āĻĄ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻ¤āĻžāĻĻā§āĻ° āĻĒā§āĻ°āĻ¤ā§āĻ¯ā§āĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻ¤āĻŋāĻļā§āĻ˛āĻāĻžāĻŦā§ āĻāĻāĻāĻŋ āĻĢāĻžāĻāĻļāĻ¨ āĻ°âā§āĻ¯āĻžāĻĒāĻžāĻ° āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻŋ Invoke-Expression
(āĻĒā§āĻ°āĻĨāĻŽā§ āĻĢāĻžāĻāĻļāĻ¨ā§āĻ° āĻ¸āĻžāĻĨā§ āĻŦāĻŋāĻ°ā§āĻ§āĻĒā§āĻ°ā§āĻŖ āĻā§āĻ¨ā§ āĻāĻĒāĻ¨āĻžāĻŽ āĻ
āĻĒāĻ¸āĻžāĻ°āĻŖ āĻāĻ°ā§)āĨ¤
āĻĢāĻžāĻāĻļāĻ¨ āĻāĻŽāĻžāĻ¨ā§āĻĄ āĻ˛āĻžāĻāĻ¨ āĻāĻ°ā§āĻā§āĻŽā§āĻ¨ā§āĻā§āĻ° āĻāĻĒāĻ° āĻĒā§āĻ¨āĻ°āĻžāĻŦā§āĻ¤ā§āĻ¤āĻŋ āĻāĻ°ā§, āĻāĻŽāĻžāĻ¨ā§āĻĄ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻāĻ¨ā§āĻĄā§āĻ āĻĒāĻžāĻĨ āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŖ āĻāĻ°ā§ Split-Path
и Test-Path
āĻāĻŦāĻ āĻ¤āĻžāĻ°āĻĒāĻ° āĻāĻ āĻĒāĻžāĻĨāĻā§āĻ˛āĻŋāĻā§ WSL āĻĒāĻžāĻĨā§ āĻ°ā§āĻĒāĻžāĻ¨ā§āĻ¤āĻ°āĻŋāĻ¤ āĻāĻ°ā§āĨ¤ āĻāĻŽāĻ°āĻž āĻāĻāĻāĻŋ āĻšā§āĻ˛ā§āĻĒāĻžāĻ° āĻĢāĻžāĻāĻļāĻ¨ā§āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻĒāĻžāĻĨ āĻāĻžāĻ˛āĻžāĻ Format-WslArgument
, āĻ¯āĻž āĻāĻŽāĻ°āĻž āĻĒāĻ°ā§ āĻ¸āĻāĻā§āĻāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻāĻ°āĻŦāĨ¤ āĻāĻāĻŋ āĻ¸ā§āĻĒā§āĻ¸ āĻāĻŦāĻ āĻŦāĻ¨ā§āĻ§āĻ¨ā§āĻ° āĻŽāĻ¤ā§ āĻŦāĻŋāĻļā§āĻˇ āĻ
āĻā§āĻˇāĻ° āĻāĻĄāĻŧāĻŋāĻ¯āĻŧā§ āĻ¯āĻžāĻ¯āĻŧ āĻ¯āĻž āĻ
āĻ¨ā§āĻ¯āĻĨāĻžāĻ¯āĻŧ āĻā§āĻ˛ āĻŦā§āĻ¯āĻžāĻā§āĻ¯āĻž āĻāĻ°āĻž āĻšāĻŦā§āĨ¤
āĻ
āĻŦāĻļā§āĻˇā§, āĻāĻŽāĻ°āĻž āĻāĻžāĻ¨āĻžāĻ wsl
āĻĒāĻžāĻāĻĒāĻ˛āĻžāĻāĻ¨ āĻāĻ¨āĻĒā§āĻ āĻāĻŦāĻ āĻ¯ā§āĻā§āĻ¨ā§ āĻāĻŽāĻžāĻ¨ā§āĻĄ āĻ˛āĻžāĻāĻ¨ āĻāĻ°ā§āĻā§āĻŽā§āĻ¨ā§āĻāĨ¤
āĻāĻ āĻŽā§āĻĄāĻŧāĻāĻā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ā§ āĻāĻĒāĻ¨āĻŋ āĻāĻāĻāĻŋ āĻāĻĒāĻ¸āĻ°ā§āĻ āĻ¯ā§āĻ āĻ¨āĻž āĻāĻ°ā§āĻ āĻāĻĒāĻ¨āĻžāĻ° āĻĒā§āĻ°āĻŋāĻ¯āĻŧ āĻ˛āĻŋāĻ¨āĻžāĻā§āĻ¸ āĻāĻŽāĻžāĻ¨ā§āĻĄāĻā§āĻ˛āĻŋāĻā§ āĻāĻ°āĻ āĻĒā§āĻ°āĻžāĻā§āĻ¤āĻŋāĻ āĻāĻĒāĻžāĻ¯āĻŧā§ āĻāĻ˛ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ wsl
āĻāĻŦāĻ āĻĒāĻĨāĻā§āĻ˛āĻŋ āĻā§āĻāĻžāĻŦā§ āĻ°ā§āĻĒāĻžāĻ¨ā§āĻ¤āĻ°āĻŋāĻ¤ āĻšāĻ¯āĻŧ āĻ¸ā§ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻŋāĻ¨ā§āĻ¤āĻž āĻ¨āĻž āĻāĻ°ā§:
man bash
less -i $profile.CurrentUserAllHosts
ls -Al C:Windows | less
grep -Ein error *.log
tail -f *.log
āĻāĻŽāĻžāĻ¨ā§āĻĄā§āĻ° āĻŽā§āĻ˛āĻŋāĻ āĻ¸ā§āĻ āĻāĻāĻžāĻ¨ā§ āĻĻā§āĻāĻžāĻ¨ā§ āĻšāĻ¯āĻŧā§āĻā§, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻĒāĻ¨āĻŋ āĻ¯ā§āĻā§āĻ¨ āĻ˛āĻŋāĻ¨āĻžāĻā§āĻ¸ āĻāĻŽāĻžāĻ¨ā§āĻĄā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻļā§āĻ˛ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ¤āĻžāĻ˛āĻŋāĻāĻžāĻ¯āĻŧ āĻ¯ā§āĻ āĻāĻ°ā§āĨ¤ āĻāĻĒāĻ¨āĻŋ āĻāĻĒāĻ¨āĻžāĻ° āĻāĻ āĻā§āĻĄ āĻ¯ā§āĻ āĻāĻ°ā§āĻ¨
āĻĄāĻŋāĻĢāĻ˛ā§āĻ āĻĒāĻ°āĻžāĻŽāĻŋāĻ¤āĻŋ
āĻ˛āĻŋāĻ¨āĻžāĻā§āĻ¸ā§, āĻ˛āĻāĻāĻ¨ āĻĒā§āĻ°ā§āĻĢāĻžāĻāĻ˛ā§ āĻāĻĒāĻ¨āĻžāĻŽ āĻāĻŦāĻ/āĻ
āĻĨāĻŦāĻž āĻāĻ¨āĻāĻžāĻ¯āĻŧāĻ°āĻ¨āĻŽā§āĻ¨ā§āĻ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ āĻ¸āĻāĻā§āĻāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻāĻ°āĻž āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ, āĻĒā§āĻ°āĻžāĻ¯āĻŧāĻļāĻ āĻŦā§āĻ¯āĻŦāĻšā§āĻ¤ āĻāĻŽāĻžāĻ¨ā§āĻĄā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĄāĻŋāĻĢāĻ˛ā§āĻ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻāĻžāĻ° āĻ¸ā§āĻ āĻāĻ°āĻž (āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, alias ls=ls -AFh
āĻŦāĻž export LESS=-i
) āĻāĻāĻāĻŋ āĻ
-āĻāĻ¨ā§āĻāĻžāĻ°ā§āĻā§āĻāĻŋāĻ āĻļā§āĻ˛ā§āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻĒā§āĻ°āĻā§āĻ¸āĻŋ āĻāĻ°āĻžāĻ° āĻ
āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻāĻāĻāĻŋ wsl.exe
- āĻ¯ā§ āĻĒā§āĻ°ā§āĻĢāĻžāĻāĻ˛āĻā§āĻ˛āĻŋ āĻ˛ā§āĻĄ āĻāĻ°āĻž āĻšāĻ¯āĻŧ āĻ¨āĻž, āĻ¤āĻžāĻ āĻāĻ āĻŦāĻŋāĻāĻ˛ā§āĻĒāĻā§āĻ˛āĻŋ āĻĄāĻŋāĻĢāĻ˛ā§āĻāĻ°ā§āĻĒā§ āĻāĻĒāĻ˛āĻŦā§āĻ§ āĻ¨āĻ¯āĻŧ (āĻ¯ā§āĻŽāĻ¨ ls
WSL āĻāĻŦāĻ wsl ls
āĻāĻĒāĻ°ā§ āĻ¸āĻāĻā§āĻāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻāĻĒāĻ¨āĻžāĻŽā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻŋāĻ¨ā§āĻ¨āĻāĻžāĻŦā§ āĻāĻāĻ°āĻŖ āĻāĻ°āĻŦā§)āĨ¤
āĻĒāĻžāĻāĻ¯āĻŧāĻžāĻ°āĻļā§āĻ˛ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°ā§ -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
. āĻĄāĻŋāĻĢāĻ˛ā§āĻ āĻ¸ā§āĻāĻŋāĻāĻ¸ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻā§āĻāĻžāĻŦā§ āĻāĻĒāĻ¨āĻžāĻ° āĻĒāĻžāĻāĻ¯āĻŧāĻžāĻ°āĻļā§āĻ˛ āĻĒā§āĻ°ā§āĻĢāĻžāĻāĻ˛ā§ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļāĻžāĻŦāĻ˛ā§ āĻ¯ā§āĻ āĻāĻ°āĻ¤ā§ āĻšāĻ¯āĻŧ āĻ¤āĻž āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤āĻāĻŋ āĻĻā§āĻāĻžāĻ¯āĻŧāĨ¤ āĻāĻāĻ¨ āĻāĻŽāĻ°āĻž āĻāĻāĻž āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŋ!
$WslDefaultParameterValues["grep"] = "-E"
$WslDefaultParameterValues["less"] = "-i"
$WslDefaultParameterValues["ls"] = "-AFh --group-directories-first"
āĻ¯ā§āĻšā§āĻ¤ā§ āĻĒāĻ°āĻžāĻŽāĻŋāĻ¤āĻŋ āĻĒāĻ°ā§ āĻŽāĻĄā§āĻ˛ āĻāĻ°āĻž āĻšāĻ¯āĻŧ $PSDefaultParameterValues
, āĻāĻĒāĻ¨āĻŋ āĻĒāĻžāĻ°ā§āĻ¨ "Disabled"
āĻ
āĻ°ā§āĻĨā§ $true
. āĻāĻāĻāĻŋ āĻĒā§āĻĨāĻ āĻšā§āĻ¯āĻžāĻļ āĻā§āĻŦāĻŋāĻ˛ā§āĻ° āĻāĻāĻāĻŋ āĻ
āĻ¤āĻŋāĻ°āĻŋāĻā§āĻ¤ āĻ¸ā§āĻŦāĻŋāĻ§āĻž āĻšāĻ˛ āĻ¨āĻŋāĻˇā§āĻā§āĻ°āĻŋāĻ¯āĻŧ āĻāĻ°āĻžāĻ° āĻā§āĻˇāĻŽāĻ¤āĻž $WslDefaultParameterValues
āĻĨā§āĻā§ āĻāĻ˛āĻžāĻĻāĻžāĻāĻžāĻŦā§ $PSDefaultParameterValues
.
āĻ¯ā§āĻā§āĻ¤āĻŋ āĻ¸āĻŽāĻžāĻĒā§āĻ¤āĻŋ
PowerShell āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻŽāĻžāĻ¨ā§āĻĄ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻ°ā§āĻā§āĻŽā§āĻ¨ā§āĻ āĻā§āĻ°ā§āĻ˛āĻžāĻ° āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻ¨ āĻāĻ°āĻ¤ā§ āĻĻā§āĻ¯āĻŧ Register-ArgumentCompleter
. āĻŦāĻžāĻļ āĻļāĻā§āĻ¤āĻŋāĻļāĻžāĻ˛ā§ āĻāĻā§
# 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
āĻ¸ā§āĻĒā§āĻ¸āĻŋāĻĢāĻŋāĻā§āĻļāĻ¨ āĻ āĻ¨ā§āĻ¯āĻžāĻ¯āĻŧā§ bash āĻāĻ° āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻĢāĻžāĻāĻļāĻ¨ āĻĻā§āĻŦāĻžāĻ°āĻž āĻĒā§āĻ°āĻ¤ā§āĻ¯āĻžāĻļāĻŋāĻ¤ āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸ā§āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽā§āĻŦāĻ˛ āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧ āĻ¸āĻŽāĻžāĻĒā§āĻ¤āĻŋ āĻŦāĻžāĻļ - āĻāĻŽāĻ°āĻž āĻ¸ā§āĻĨāĻžāĻ¨āĻžāĻ¨ā§āĻ¤āĻ° āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻāĻŽāĻžāĻ¨ā§āĻĄ āĻ˛āĻžāĻāĻ¨ āĻ°āĻāĻ¨āĻž āĻāĻ°āĻŋ
wsl.exe
, āĻ¯āĻž āĻ¨āĻŋāĻļā§āĻāĻŋāĻ¤ āĻāĻ°ā§ āĻ¯ā§ āĻĒāĻ°āĻŋāĻŦā§āĻļ āĻ¸āĻ āĻŋāĻāĻāĻžāĻŦā§ āĻ¸ā§āĻ āĻāĻĒ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§, āĻāĻĒāĻ¯ā§āĻā§āĻ¤ āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧ-āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻĢāĻžāĻāĻļāĻ¨āĻā§ āĻāĻ˛ āĻāĻ°ā§ āĻāĻŦāĻ āĻĢāĻ˛āĻžāĻĢāĻ˛āĻā§āĻ˛āĻŋ āĻ˛āĻžāĻāĻ¨-āĻŦāĻžāĻ-āĻ˛āĻžāĻāĻ¨ āĻĢā§āĻ¯āĻžāĻļāĻ¨ā§ āĻāĻāĻāĻĒā§āĻ āĻāĻ°ā§āĨ¤ - āĻ¤āĻžāĻ°āĻĒāĻ° āĻāĻŽāĻ°āĻž āĻāĻ˛
wsl
āĻāĻŽāĻžāĻ¨ā§āĻĄ āĻ˛āĻžāĻāĻ¨ā§āĻ° āĻ¸āĻžāĻĨā§, āĻāĻŽāĻ°āĻž āĻ˛āĻžāĻāĻ¨ āĻŦāĻŋāĻāĻžāĻāĻ āĻĻā§āĻŦāĻžāĻ°āĻž āĻāĻāĻāĻĒā§āĻ āĻāĻ˛āĻžāĻĻāĻž āĻāĻ°āĻŋ āĻāĻŦāĻ āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻŋCompletionResults
, āĻ¤āĻžāĻĻā§āĻ° āĻŦāĻžāĻāĻžāĻ āĻāĻ°āĻž āĻāĻŦāĻ āĻ¸ā§āĻĒā§āĻ¸ āĻāĻŦāĻ āĻŦāĻ¨ā§āĻ§āĻ¨ā§āĻ° āĻŽāĻ¤ā§ āĻ āĻā§āĻˇāĻ°āĻā§āĻ˛āĻŋ āĻāĻĄāĻŧāĻŋāĻ¯āĻŧā§ āĻ¯āĻžāĻāĻ¯āĻŧāĻž āĻ¯āĻž āĻ āĻ¨ā§āĻ¯āĻĨāĻžāĻ¯āĻŧ āĻā§āĻ˛ āĻŦā§āĻ¯āĻžāĻā§āĻ¯āĻž āĻāĻ°āĻž āĻšāĻŦā§āĨ¤
āĻĢāĻ˛āĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻāĻŽāĻžāĻĻā§āĻ° āĻ˛āĻŋāĻ¨āĻžāĻā§āĻ¸ āĻāĻŽāĻžāĻ¨ā§āĻĄ āĻļā§āĻ˛āĻā§āĻ˛āĻŋ āĻŦā§āĻ¯āĻžāĻļ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻ āĻŋāĻ āĻāĻāĻ āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖāĻ¤āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŦā§! āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻ¸ā§āĻŦāĻ°ā§āĻĒ:
ssh -c <TAB> -J <TAB> -m <TAB> -O <TAB> -o <TAB> -Q <TAB> -w <TAB> -b <TAB>
āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖāĻ¤āĻž āĻĒā§āĻ°ā§āĻŦāĻŦāĻ°ā§āĻ¤ā§ āĻāĻ°ā§āĻā§āĻŽā§āĻ¨ā§āĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻŽāĻžāĻ¨ āĻ¸āĻ°āĻŦāĻ°āĻžāĻš āĻāĻ°ā§, āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨ āĻĄā§āĻāĻž āĻĒāĻĄāĻŧāĻž āĻ¯ā§āĻŽāĻ¨ WSL āĻĨā§āĻā§ āĻĒāĻ°āĻŋāĻāĻŋāĻ¤ āĻšā§āĻ¸ā§āĻ!
<TAB>
āĻĒāĻ°āĻžāĻŽāĻŋāĻ¤āĻŋ āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻāĻā§āĻ° āĻšāĻŦā§. <Ctrl + ĐŋŅОйĐĩĐģ>
āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻāĻĒāĻ˛āĻŦā§āĻ§ āĻŦāĻŋāĻāĻ˛ā§āĻĒ āĻĻā§āĻāĻžāĻŦā§āĨ¤
āĻāĻāĻžāĻĄāĻŧāĻžāĻ, āĻ¯ā§āĻšā§āĻ¤ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻāĻ¨ āĻŦā§āĻ¯āĻžāĻļ āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖāĻ¤āĻž āĻ°āĻ¯āĻŧā§āĻā§, āĻāĻĒāĻ¨āĻŋ āĻĒāĻžāĻāĻ¯āĻŧāĻžāĻ°āĻļā§āĻ˛ā§ āĻ¸āĻ°āĻžāĻ¸āĻ°āĻŋ āĻ˛āĻŋāĻ¨āĻžāĻā§āĻ¸ āĻĒāĻžāĻĨāĻā§āĻ˛āĻŋ āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨!
less /etc/<TAB>
ls /usr/share/<TAB>
vim ~/.bash<TAB>
āĻ¯ā§āĻ¸āĻŦ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻŦā§āĻ¯āĻžāĻļ āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖāĻ¤āĻž āĻā§āĻ¨ā§ āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻĻā§āĻ¯āĻŧ āĻ¨āĻž, PowerShell āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽā§āĻ° āĻĄāĻŋāĻĢāĻ˛ā§āĻ āĻāĻāĻ¨ā§āĻĄā§āĻ āĻĒāĻžāĻĨāĻā§āĻ˛āĻŋāĻ¤ā§ āĻĢāĻŋāĻ°ā§ āĻāĻ¸ā§āĨ¤ āĻ¸ā§āĻ¤āĻ°āĻžāĻ, āĻ āĻ¨ā§āĻļā§āĻ˛āĻ¨ā§, āĻāĻĒāĻ¨āĻŋ āĻāĻāĻ āĻ¸āĻžāĻĨā§ āĻāĻĒāĻ¨āĻžāĻ° āĻŦāĻŋāĻŦā§āĻāĻ¨āĻžāĻ° āĻāĻŋāĻ¤ā§āĻ¤āĻŋāĻ¤ā§ āĻāĻāĻ¯āĻŧ āĻĒāĻĨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤
āĻāĻĒāĻ¸āĻāĻšāĻžāĻ°
PowerShell āĻāĻŦāĻ WSL āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§, āĻāĻŽāĻ°āĻž āĻ˛āĻŋāĻ¨āĻžāĻā§āĻ¸ āĻāĻŽāĻžāĻ¨ā§āĻĄāĻā§āĻ˛āĻŋāĻā§ āĻāĻāĻ¨ā§āĻĄā§āĻā§ āĻ¨ā§āĻāĻŋāĻ āĻ
ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻāĻā§āĻā§āĻ¤ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŋāĨ¤ Win32 āĻŦāĻŋāĻ˛ā§āĻĄ āĻŦāĻž āĻ˛āĻŋāĻ¨āĻžāĻā§āĻ¸ āĻāĻāĻāĻŋāĻ˛āĻŋāĻāĻŋāĻā§āĻ˛āĻŋ āĻ
āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻāĻ°āĻžāĻ° āĻŦāĻž āĻ˛āĻŋāĻ¨āĻžāĻā§āĻ¸ āĻļā§āĻ˛ā§ āĻāĻŋāĻ¯āĻŧā§ āĻāĻĒāĻ¨āĻžāĻ° āĻāĻ°ā§āĻŽāĻĒā§āĻ°āĻŦāĻžāĻšāĻā§ āĻŦāĻžāĻ§āĻž āĻĻā§āĻāĻ¯āĻŧāĻžāĻ° āĻĻāĻ°āĻāĻžāĻ° āĻ¨ā§āĻāĨ¤ āĻļā§āĻ§ā§
āĻāĻĒāĻ°ā§ āĻŦāĻ°ā§āĻŖāĻŋāĻ¤ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻ¸ā§āĻ°ā§āĻ¸ āĻā§āĻĄ, āĻ¸ā§āĻāĻ¸āĻžāĻĨā§ āĻāĻāĻŋāĻā§ āĻāĻĒāĻ¨āĻžāĻ° āĻāĻ¯āĻŧāĻžāĻ°ā§āĻāĻĢā§āĻ˛ā§āĻ¤ā§ āĻ
āĻ¨ā§āĻ¤āĻ°ā§āĻā§āĻā§āĻ¤ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻ
āĻ¤āĻŋāĻ°āĻŋāĻā§āĻ¤ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļāĻŋāĻāĻž āĻāĻĒāĻ˛āĻŦā§āĻ§
āĻā§āĻ¨ āĻ˛āĻŋāĻ¨āĻžāĻā§āĻ¸ āĻāĻŽāĻžāĻ¨ā§āĻĄāĻā§āĻ˛āĻŋ āĻāĻĒāĻ¨āĻŋ āĻ¸āĻŦāĻā§āĻ¯āĻŧā§ āĻĻāĻ°āĻāĻžāĻ°ā§ āĻŦāĻ˛ā§ āĻŽāĻ¨ā§ āĻāĻ°ā§āĻ¨? āĻāĻāĻ¨ā§āĻĄā§āĻā§ āĻāĻžāĻ āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ
āĻ¨ā§āĻ¯ āĻā§āĻ¨ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻāĻŋāĻ¨āĻŋāĻ¸āĻā§āĻ˛āĻŋ āĻ
āĻ¨ā§āĻĒāĻ¸ā§āĻĨāĻŋāĻ¤? āĻāĻŽā§āĻ¨ā§āĻā§ āĻ˛āĻŋāĻā§āĻ¨ āĻŦāĻž
āĻāĻ¤ā§āĻ¸: www.habr.com