我发现了以下我不理解的行为。我的$profile
中有一些功能(具体来说,它们会更改prompt
,因此会更改function prmopt { }
),这些设置会更改我的提示,并且在启动控制台时,如果我将功能(. PromptCustom
)来源完全生效,新的提示将接管。但是,我不希望我的$profile
太大,所以我将五个或五个左右不同的提示移到了模块中,但是当我尝试对其中的任何一个进行点源处理时,什么也没发生。它们只是输出提示内容,但not会接管默认的prompt
。
目标是能够具有多个提示创建功能,我可以根据需要在它们之间进行切换(即,不是一个适用于每个控制台的提示,我只需将function prompt
放入我的$profile
中即可。告诉我如何正确地为模块中定义的函数提供源代码,以及如何实现具有多个我可以在它们之间切换的提示函数并使这些函数在模块上运行的目标?(编辑:将此问题更新为@ mklement0指出,因为实际上这与所需的目标有关,即提示我可以在两者之间进行切换。
这里是我的提示函数之一,如果在我的$profile
中定义了此函数,则该函数将作为默认提示perfectly
function PromptShortenPath {
# https://stackoverflow.com/questions/1338453/custom-powershell-prompts
function shorten-path([string] $path) {
$loc = $path.Replace($HOME, '~')
# remove prefix for UNC paths
$loc = $loc -replace '^[^:]+::', ''
# make path shorter like tabs in Vim,
# handle paths starting with \\ and . correctly
return ($loc -replace '\\(\.?)([^\\])[^\\]*(?=\\)','\$1$2')
}
function prompt {
# our theme
$cdelim = [ConsoleColor]::DarkCyan
$chost = [ConsoleColor]::Green
$cloc = [ConsoleColor]::Cyan
write-host "$([char]0x0A7) " -n -f $cloc
write-host ([net.dns]::GetHostName()) -n -f $chost
write-host ' {' -n -f $cdelim
write-host (shorten-path (pwd).Path) -n -f $cloc
write-host '}' -n -f $cdelim
return ' '
}
if ($MyInvocation.InvocationName -eq "PromptShortenPath") {
"`nWarning: Must dotsource '$($MyInvocation.MyCommand)' or it will not be applied to this session.`n`n . $($MyInvocation.MyCommand)`n"
} else {
. prompt
}
}
我发现了以下我不理解的行为。我的$ profile中有一些功能(具体来说,它们会更改提示,所以功能prmopt {})的设置会更改我的提示...