当前,我正在编写一个PowerShell模块,该模块会自动为所有git命令配置别名,这些命令受git-sh启发。
然后,我在下面编写了函数。
该Enable-GitAliases
功能是自动配置别名的入口点。
它通过收集git的子命令Get-GitCommands
,该子命令进行解析git --help -a
以获取所有git的子命令。
然后,它为收集的git命令定义包装函数。
我的问题是:为什么git --help -a
调用时调用了很多次(可能是无限次)Enable-GitAliases
,这会导致速度显着下降?
编写代码后,我发现Enable-GitAliases
花了太多时间(我从未见过它完成)。
根据任务管理器,该git --help -a
命令被启动并反复退出。
我希望该git --help -a
命令仅被调用一次。
实际上,只Get-GitCommands | % { echo $_ }
调用git --help -a
一次。
有什么区别,什么是最佳修复方法?
function Get-GitCommands {
-Split (git --help -a | select-string -pattern '^ [-a-zA-Z0-9.]+\s*')
}
function Enable-GitAliases($avoidConflicts = $true) {
Get-GitCommands | % {
$aliasName = $_
if (-not ($avoidConflicts -and (Get-Command $aliasName 2> $null) -ne $null)) {
Enable-GitAliases $aliasName
}
}
}
function Enable-GitAlias($commandName) {
$wrapper = @'
function global:{0} {{
git {0} $args
}}
'@ -f $commandName
Invoke-Expression $wrapper
}
您Enable-GitAliases
递归调用,但这是故意的吗?
这是你的意图吗?
function Enable-GitAliases($avoidConflicts = $true) {
Get-GitCommands | % {
$aliasName = $_
if (-not ($avoidConflicts -and (Get-Command $aliasName 2> $null) -ne $null)) {
# Enable-GitAliases -> Enable-GitAlias
Enable-GitAlias $aliasName
}
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句