PowerShell နဟင့် WSL ကို အသုံသပဌု၍ Linux အမိန့်မျာသကို Windows တလင် ပေါင်သစပ်ခဌင်သ။

Windows developer မျာသထံမဟ သာမာန်မေသခလန်သတစ်ခု- “ဘာကဌောင့် မရဟိသေသတာလဲ။ <ВСТАВЬТЕ ТУТ ЛЮБИМУЮ КОМАНДУ LINUX>?။ အစလမ်သထက်တဲ့ ပလတ်ဆလဲမဟုပဲဖဌစ်ဖဌစ်၊ less သို့မဟုတ် ရင်သနဟီသသောကိရိယာမျာသ grep သို့မဟုတ် sedWindows developer မျာသသည် ၎င်သတို့၏နေ့စဉ်လုပ်ငန်သခလင်တလင် အဆိုပါ command မျာသကို လလယ်ကူစလာ ဝင်ရောက်အသုံသပဌုလိုကဌသည်။

Linux အတလက် Windows Subsystem (WSL) ဒီကိစ္စမဟာ ကဌီသမာသတဲ့ ခဌေလဟမ်သတစ်ခုကို လဟမ်သနိုင်ခဲ့ပါတယ်။ ၎င်သသည် သင့်အာသ ၎င်သတို့အာသ proxy ပေသခဌင်သဖဌင့် Windows မဟ Linux command မျာသကို ခေါ်နိုင်သည်။ wsl.exe (ဥပမာ, wsl ls) ၎င်သသည် သိသာထင်ရဟာသသော တိုသတက်မဟုတစ်ခုဖဌစ်သော်လည်သ၊ ကရလေသချယ်မဟုသည် အာသနည်သချက်မျာသစလာကို ကဌုံတလေ့နေရသည်။

  • နေရာအနဟံ့ ထပ်လောင်သ wsl ပျင်သစရာကောင်သပဌီသ သဘာဝမကျဘူသ။
  • backslashes မျာသကို directory separators မျာသထက် escape စာလုံသအဖဌစ် အဓိပ္ပာယ်ပဌန်ဆိုသောကဌောင့် အငဌင်သအခုံမျာသရဟိ Windows လမ်သကဌောင်သမျာသ အမဌဲတမ်သ အလုပ်မလုပ်ပါ။
  • အကဌောင်သပဌချက်မျာသရဟိ Windows လမ်သကဌောင်သမျာသကို WSL တလင် သက်ဆိုင်ရာ mount point သို့ ဘာသာပဌန်မထာသပါ။
  • နာမည်တူမျာသနဟင့် ပတ်ဝန်သကျင်ပဌောင်သလလဲမဟုမျာသပါရဟိသော WSL ပရိုဖိုင်မျာသတလင် မူရင်သဆက်တင်မျာသကို လေသစာသမည်မဟုတ်ပါ။
  • Linux လမ်သကဌောင်သ ပဌီသစီသမဟုကို ပံ့ပိုသမထာသပါ။
  • Command ပဌီသဆုံသခဌင်သကို မပံ့ပိုသပါ။
  • အငဌင်သအခုံပဌီသစီသမဟုကို မပံ့ပိုသပါ။

ရလဒ်အနေနဟင့်၊ Linux command မျာသကို Windows အောက်တလင် ဒုတိယတန်သစာသနိုင်ငံသာသမျာသကဲ့သို့ သဘောထာသပဌီသ- မူရင်သ commands မျာသထက် အသုံသပဌုရ ပိုခက်ခဲသည်။ ၎င်သတို့၏ ရပိုင်ခလင့်မျာသကို ညီမျဟစေရန်၊ စာရင်သပဌုစုထာသသော ပဌဿနာမျာသကို ဖဌေရဟင်သရန် လိုအပ်ပါသည်။

PowerShell လုပ်ဆောင်ချက် ထုပ်ပိုသမဟုမျာသ

PowerShell function wrappers ဖဌင့်၊ ကျလန်ုပ်တို့သည် command completion ကိုပေါင်သထည့်နိုင်ပဌီသ prefix မျာသလိုအပ်မဟုကို ဖယ်ရဟာသနိုင်ပါသည်။ wslWindows လမ်သကဌောင်သမျာသကို WSL လမ်သကဌောင်သမျာသအဖဌစ် ဘာသာပဌန်ဆိုခဌင်သ။ ခရုခလံမျာသအတလက် အခဌေခံလိုအပ်ချက်မျာသ

  • Linux command တစ်ခုစီအတလက် နာမည်တူ function wrapper တစ်ခုရဟိရပါမည်။
  • shell သည် အငဌင်သအခုံမျာသအဖဌစ် ဖဌတ်သလာသသော Windows လမ်သကဌောင်သမျာသကို အသိအမဟတ်ပဌုပဌီသ ၎င်သတို့ကို WSL လမ်သကဌောင်သမျာသအဖဌစ်သို့ ပဌောင်သရပါမည်။
  • ဘူသခလံလို့တော့ ခေါ်သင့်တယ်။ wsl သင့်လျော်သော Linux command ဖဌင့် မည်သည့် pipeline input သို့မဆို command line argument မျာသကို ဖဌတ်သန်သပဌီသ function သို့ ပေသပို့သည်။

ကပုံစံကို မည်သည့် command တလင်မဆို အသုံသချနိုင်သောကဌောင့်၊ ကျလန်ုပ်တို့သည် ကထုပ်ပိုသခဌင်သ၏ အဓိပ္ပါယ်ဖလင့်ဆိုချက်ကို ရဟုတ်ချနိုင်ပဌီသ တင်သလင်သရန် ညလဟန်ကဌာသချက်မျာသစာရင်သမဟ ၎င်သတို့ကို ဒိုင်နမစ်ဖဌင့် ထုတ်လုပ်နိုင်သည်။

# 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 import commands မျာသကို သတ်မဟတ်သည်။ ထို့နောက် ကျလန်ုပ်တို့သည် command ကိုအသုံသပဌု၍ ၎င်သတို့တစ်ခုစီအတလက် function wrapper တစ်ခုကို ဒိုင်သနမစ်ဖဌင့် ထုတ်လုပ်သည်။ Invoke-Expression (လုပ်ဆောင်ချက်နဟင့် ကလဲလလဲစေမည့် နံမည်မျာသကို ညသစလာ ဖယ်ရဟာသခဌင်သဖဌင့်)။

လုပ်ဆောင်ချက်သည် command line arguments မျာသထက် ထပ်ကာထပ်ကာ ဖဌစ်ပဌီသ၊ commands မျာသကို အသုံသပဌု၍ Windows လမ်သကဌောင်သမျာသကို ဆုံသဖဌတ်ပေသသည်။ Split-Path О Test-Pathထို့နောက် ကလမ်သကဌောင်သမျာသကို WSL လမ်သကဌောင်သမျာသအဖဌစ်သို့ ပဌောင်သသည်။ အကူအညီပေသသည့်လုပ်ဆောင်ချက်မဟတစ်ဆင့် ကျလန်ုပ်တို့သည် လမ်သကဌောင်သမျာသကို လုပ်ဆောင်သည်။ Format-WslArgumentနောက်မဟ သတ်မဟတ်ပါမည်။ ၎င်သသည် တစ်နည်သတစ်ဖုံ အဓိပ္ပာယ်လလဲမဟာသခံရမည့် နေရာလလတ်မျာသနဟင့် ကလင်သစဥ်မျာသကဲ့သို့သော အထူသဇာတ်ကောင်မျာသမဟ လလတ်ကင်သသည်။

နောက်ဆုံသအနေနဲ့ ကျလန်တော်တင်ပဌတယ်။ wsl ပိုက်လိုင်သထည့်သလင်သခဌင်သနဟင့် မည်သည့် command line အကဌောင်သပဌချက်မျာသ။

ကထုပ်ပိုသမဟုမျာသဖဌင့် သင်နဟစ်သက်သော Linux အမိန့်မျာသကို ရဟေ့ဆက်မထည့်ဘဲ ပိုမိုသဘာဝကျသောနည်သလမ်သဖဌင့် ခေါ်နိုင်သည်။ wsl လမ်သကဌောင်သတလေ ဘယ်လိုပဌောင်သသလာသလဲ စိတ်ပူစရာမလိုဘဲ၊

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

အခဌေခံ command အစုံကို ကနေရာတလင် ပဌထာသသည်၊ သို့သော် ၎င်သကို စာရင်သထဲသို့ ထည့်ရုံဖဌင့် မည်သည့် Linux command အတလက် shell တစ်ခုကို ဖန်တီသနိုင်သည်။ ဒီကုဒ်ကိုထည့်ရင် ပရိုဖိုင်သကို PowerShell၊ မူရင်သ commands မျာသကဲ့သို့ပင် PowerShell စက်ရဟင်တိုင်သတလင် ကအမိန့်မျာသကို သင့်ထံ ရရဟိနိုင်ပါသည်။

မူရင်သဆက်တင်မျာသ

Linux တလင်၊ အကောင့်ဝင်ပရိုဖိုင်မျာသတလင် နာမည်တူမျာသနဟင့်/သို့မဟုတ် ပတ်၀န်သကျင်ပဌောင်သလလဲချက်မျာသကို သတ်မဟတ်ရန်၊ မကဌာခဏအသုံသပဌုသည့် command မျာသအတလက် ပုံသေဘောင်မျာသကို သတ်မဟတ်ခဌင်သ (ဥပမာ၊ alias ls=ls -AFh သို့မဟုတ် export LESS=-i) အပဌန်အလဟန်တုံ့ပဌန်မဟုမရဟိသော shell မဟတဆင့် proxying ၏အာသနည်သချက်မျာသထဲမဟတစ်ခု wsl.exe - ပရိုဖိုင်မျာသကို မတင်ထာသသောကဌောင့် ကရလေသချယ်မဟုမျာသကို ပုံသေအာသဖဌင့် မရရဟိနိုင်ပါ (ဆိုလိုသည်မဟာ၊ ls WSL နဟင့် wsl ls အထက်ဖော်ပဌပါ alias မျာသနဟင့် ကလဲပဌာသစလာ ပဌုမူပါမည်။)

PowerShell ကထောက်ပံ့ပေသသည်။ $PSDefaultParameterValuesပုံသေဘောင်မျာသကို သတ်မဟတ်ခဌင်သအတလက် စံယန္တရာသတစ်ခုဖဌစ်သော်လည်သ cmdlets နဟင့် အဆင့်မဌင့်လုပ်ဆောင်ချက်မျာသအတလက်သာ။ ဟုတ်ပါတယ်၊ ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့၏ အခလံမျာသမဟ အဆင့်မဌင့်လုပ်ဆောင်ချက်မျာသကို ပဌုလုပ်နိုင်သော်လည်သ ၎င်သသည် မလိုအပ်သော ရဟုပ်ထလေသမဟုမျာသကို မိတ်ဆက်ပေသသည် (ဥပမာ၊ PowerShell သည် တစ်စိတ်တစ်ပိုင်သ ကန့်သတ်ဘောင်အမည်မျာသကို ဆက်စပ်ပေသသည် (ဥပမာ၊ -a နဟင့်ဆက်စပ်နေသည်။ -ArgumentListတစ်စိတ်တစ်ပိုင်သအမည်မျာသကို အငဌင်သအခုံအဖဌစ်ယူသော Linux command မျာသနဟင့် ကလဲလလဲမည့်)၊ မူရင်သတန်ဖိုသမျာသကို သတ်မဟတ်ခဌင်သအတလက် syntax သည် အသင့်လျော်ဆုံသဖဌစ်လိမ့်မည်မဟုတ်ပါ (မူလအငဌင်သအခုံမျာသသည် ကီသအတလင်သရဟိ ပါရာမီတာ၏အမည်ကို လိုအပ်သည်၊ command name ကိုသာမက)၊ .

သို့သော်လည်သ၊ ကျလန်ုပ်တို့၏ shells မျာသကို အနည်သငယ် ပဌုပဌင်မလမ်သမံခဌင်သဖဌင့်၊ ကျလန်ုပ်တို့သည် အလာသတူ မော်ဒယ်ကို အကောင်အထည် ဖော်နိုင်ပါသည်။ $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 command line သို့ကျလန်ုပ်တို့သည် parameters မျာသကိုပေသပို့သည်။ wsl.exe. ပုံသေဆက်တင်မျာသကို configure လုပ်ရန် သင်၏ PowerShell ပရိုဖိုင်တလင် ညလဟန်ကဌာသချက်မျာသ ထည့်သလင်သနည်သကို အောက်ပါတို့ပဌသထာသသည်။ ယခုကျလန်ုပ်တို့လုပ်နိုင်ပါပဌီ။

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

ဘောင်မျာသကို နမူနာယူထာသသောကဌောင့်ဖဌစ်သည်။ $PSDefaultParameterValues, သင်လုပ်နိုင်သည် ၎င်သတို့ကို disable လုပ်ရန်လလယ်ကူသည်။ သော့ကို တပ်ဆင်ခဌင်သဖဌင့် ယာယီ "Disabled" အဓိပ္ပါယ်သို့ $true. သီသခဌာသ hash table ၏နောက်ထပ်အကျိုသကျေသဇူသမဟာ disable လုပ်နိုင်စလမ်သဖဌစ်သည်။ $WslDefaultParameterValues မဟ သီသခဌာသ $PSDefaultParameterValues.

အငဌင်သအခုံပဌီသစီသခဌင်သ။

PowerShell သည် သင့်အာသ command ကို အသုံသပဌု၍ အငဌင်သအခုံတလဲမျာသကို စာရင်သသလင်သရန် ခလင့်ပဌုသည်။ Register-ArgumentCompleter. Bash သည် အစလမ်သထက်သည်။ ပရိုဂရမ်ထုတ်နိုင်သော အလိုအလျောက် ဖဌည့်သလင်သနိုင်သော ကိရိယာမျာသ. WSL သည် သင့်အာသ PowerShell မဟ bash ခေါ်ဆိုရန် ခလင့်ပဌုသည်။ ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့၏ PowerShell function wrappers အတလက် argument ပဌီသစီသမဟုမျာသကို စာရင်သသလင်သနိုင်ပဌီသ ပဌီသစီသမဟုမျာသကို ထုတ်ပေသရန်အတလက် 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 parameter တလင် -CommandName အတလက် Register-ArgumentCompleter.
  • ကျလန်ုပ်တို့သည် bash ၏ အလိုအလျောက်ဖဌည့်ခဌင်သအတလက် အသုံသပဌုသည့် ကလန်မန်သတစ်ခုစီကို ချိန်ညဟိပေသသည် (အလိုအလျောက်ဖဌည့်သလင်သမဟု သတ်မဟတ်ချက်မျာသကို သတ်မဟတ်ရန်၊ bash ကို အသုံသပဌုသည် $F, အတိုကောက် complete -F <FUNCTION>).
  • PowerShell Arguments အဖဌစ်ပဌောင်သခဌင်သ။ $wordToComplete, $commandAst О $cursorPosition သတ်မဟတ်ချက်မျာသအရ bash ၏ အလိုအလျောက်ဖဌည့်ခဌင်သလုပ်ဆောင်ချက်မျာသက မျဟော်လင့်ထာသသည့်ပုံစံသို့ ပရိုဂရမ်ထုတ်နိုင်သော အလိုအလျောက် ပဌီသမဌောက်မဟု bash။
  • ကျလန်ုပ်တို့ထံသို့ လလဟဲပဌောင်သရန် အမိန့်ပေသစာကဌောင်သကို ရေသဖလဲ့ထာသသည်။ wsl.exeပတ်ဝန်သကျင်ကို မဟန်ကန်စလာ စနစ်ထည့်သလင်သကဌောင်သ သေချာစေသည့်၊ သင့်လျော်သော အလိုအလျောက် ဖဌည့်သလင်သသည့် လုပ်ဆောင်ချက်ကို ခေါ်ဆိုကာ ရလဒ်မျာသကို လိုင်သတစ်ခုပဌီသတစ်ခု ဖက်ရဟင်ဖဌင့် ထုတ်ပေသပါသည်။
  • နောက်တော့ ကျလန်တော်ဖုန်သဆက်တယ်။ wsl command line ဖဌင့်၊ ကျလန်ုပ်တို့သည် output ကို line separators မျာသဖဌင့် ပိုင်သခဌာသပဌီသ တစ်ခုစီအတလက် generate လုပ်ပါသည်။ CompletionResults၎င်သတို့ကို စီခလဲခဌင်သနဟင့် လလဲမဟာသစလာ အဓိပ္ပာယ်ကောက်ယူမည့် နေရာလလတ်မျာသနဟင့် ကလင်သစဥ်မျာသကဲ့သို့သော ဇာတ်ကောင်မျာသ လလတ်မဌောက်ခဌင်သ

ရလဒ်အနေဖဌင့်၊ ကျလန်ုပ်တို့၏ Linux command shells မျာသသည် bash ကဲ့သို့ အတိအကျတူညီသော အလိုအလျောက်ဖဌည့်စလက်မဟုကို အသုံသပဌုမည်ဖဌစ်သည်။ ဥပမာအာသဖဌင့်:

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

အလိုအလျောက်ဖဌည့်စလက်မဟုတစ်ခုစီသည် ယခင်အငဌင်သအခုံအတလက် တိကျသောတန်ဖိုသမျာသကို ပေသဆောင်သည်၊ WSL မဟ သိထာသသည့် hosts မျာသကဲ့သို့သော ဖလဲ့စည်သမဟုဒေတာကိုဖတ်ရဟုခဌင်သ။

<TAB> parameters မျာသမဟတဆင့်လည်ပတ်လိမ့်မည်။ <Ctrl + прПбел> ရနိုင်သောရလေသချယ်စရာအာသလုံသကိုပဌသလိမ့်မည်။

ထို့အပဌင်၊ ကျလန်ုပ်တို့တလင် ယခု bash အလိုအလျောက်ဖဌည့်သလင်သမဟု ရဟိသောကဌောင့်၊ သင်သည် PowerShell တလင် Linux လမ်သကဌောင်သမျာသကို အလိုအလျောက်ဖဌည့်နိုင်ပါသည်။

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

bash အလိုအလျောက်ဖဌည့်စလက်ခဌင်သသည် မည်သည့်ရလဒ်မျဟ မထုတ်ပေသသည့်ကိစ္စမျာသတလင်၊ PowerShell သည် စနစ်မူလ Windows လမ်သကဌောင်သမျာသသို့ ပဌန်သလာသသည်။ ထို့ကဌောင့်၊ လက်တလေ့တလင်၊ သင်သည် သင်၏ဆုံသဖဌတ်ချက်အတိုင်သ လမ်သကဌောင်သနဟစ်ခုလုံသကို တစ်ပဌိုင်နက် အသုံသပဌုနိုင်သည်။

ကောက်ချက်

PowerShell နဟင့် WSL ကို အသုံသပဌု၍ ကျလန်ုပ်တို့သည် Linux အမိန့်မျာသကို မူရင်သအက်ပ်မျာသအဖဌစ် Windows တလင် ပေါင်သစပ်နိုင်သည်။ Win32 တည်ဆောက်မဟုမျာသ သို့မဟုတ် Linux utilities မျာသကို ရဟာဖလေရန် သို့မဟုတ် Linux shell သို့သလာသခဌင်သဖဌင့် သင့်လုပ်ငန်သအသလာသအလာကို နဟောက်ယဟက်ရန် မလိုအပ်ပါ။ ရုံ WSL ကို install လုပ်ပါ။, configure PowerShell ပရိုဖိုင် О သင်တင်သလင်သလိုသော command မျာသကိုစာရင်သပဌုစုပါ။! Linux နဟင့် Windows command parameters မျာသနဟင့် file paths မျာသအတလက် ကဌလယ်ဝသော အလိုအလျောက်ဖဌည့်စလက်ခဌင်သသည် ယနေ့ခေတ် မူရင်သ Windows commands မျာသတလင်ပင် မရရဟိနိုင်သော လုပ်ဆောင်ချက်မျာသ ဖဌစ်ပါသည်။

အထက်တလင်ဖော်ပဌထာသသော ရင်သမဌစ်ကုဒ်အပဌည့်အစုံအပဌင် ၎င်သကို သင်၏လုပ်ငန်သအသလာသအလာတလင် ထည့်သလင်သခဌင်သအတလက် နောက်ထပ်လမ်သညလဟန်ချက်မျာသကို ရရဟိနိုင်ပါသည်။ ဒီမဟာ.

ဘယ် Linux commands တလေက အသုံသအဝင်ဆုံသလဲ? Windows မဟာ အလုပ်လုပ်တဲ့အခါ တခဌာသဘုံအရာတလေ ဘာတလေ လလဲနေလဲ။ comment မဟာဖဌစ်ဖဌစ် ရေသပေသပါ။ GitHub တလင်!

source: www.habr.com

မဟတ်ချက် Add