如何在powershell提示符中使用波浪号?

mik*_*ana 6 powershell command-prompt

所以我明白了:

function global:prompt {
    # Commands go here
}
Run Code Online (Sandbox Code Playgroud)

在powershell中设置提示.我可以Get-Location用来获取当前的工作目录.而且我可以cd ~并且在我的家里.

但我可以提示使用波浪号吗?例如,如果我在/home/mike它应该只显示~.

我试过测试:

$pwd -contains $home
Run Code Online (Sandbox Code Playgroud)

但结果不正确.

如何在PowerShell的提示符中使用〜?

Fro*_* F. 7

您可以替换$HOME~使用普通的字符串替换.防爆.

获取当前的提示功能:

Get-Content Function:\prompt

    "PS $($executionContext.SessionState.Path.CurrentLocation)$('>' * ($nestedPromptLevel + 1)) ";
    # .Link
    # http://go.microsoft.com/fwlink/?LinkID=225750
    # .ExternalHelp System.Management.Automation.dll-help.xml
Run Code Online (Sandbox Code Playgroud)

然后更换$home~在电流通路是$home$home\*.

使用开关(可读):

function global:prompt {

    $path = switch -Wildcard ($executionContext.SessionState.Path.CurrentLocation.Path) {
        "$HOME" { "~" }
        "$HOME\*" { $executionContext.SessionState.Path.CurrentLocation.Path.Replace($HOME, "~") }
        default { $executionContext.SessionState.Path.CurrentLocation.Path }
    }

    "PS $path$('>' * ($nestedPromptLevel + 1)) ";
}
Run Code Online (Sandbox Code Playgroud)

使用正则表达式(推荐):

function global:prompt {

    $regex = [regex]::Escape($HOME) + "(\\.*)*$"

    "PS $($executionContext.SessionState.Path.CurrentLocation.Path -replace $regex, '~$1')$('>' * ($nestedPromptLevel + 1)) ";

}
Run Code Online (Sandbox Code Playgroud)

使用Split-Path(丑陋):

function global:prompt {

    $path = $executionContext.SessionState.Path.CurrentLocation.Path
    $p = $path

    while ($p -ne "") {
        if($p -eq $HOME) { $path = $path.Replace($HOME,"~"); break}
        $p = Split-Path $p
    }

    "PS $path$('>' * ($nestedPromptLevel + 1)) ";

}
Run Code Online (Sandbox Code Playgroud)

演示:

PS C:\> cd ~

PS ~> cd .\Desktop

PS ~\Desktop>
Run Code Online (Sandbox Code Playgroud)

  • 如果我的家是`C:\ SomeDir`并且我当前的位置是`C:\ SomeDirSomethingElse`怎么办? (2认同)