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的提示符中使用〜?
您可以替换$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)
| 归档时间: |
|
| 查看次数: |
3038 次 |
| 最近记录: |