gpt4 book ai didi

powershell - 为什么上游命令被调用了这么多次?

转载 作者:行者123 更新时间:2023-12-04 01:52:36 24 4
gpt4 key购买 nike

目前,我正在编写一个 PowerShell 模块,它会自动为所有 git 命令配置别名,灵感来自 git-sh。 .

然后我在下面写了函数。
Enable-GitAliases 函数是自动配置别名的入口点。
它通过 Get-GitCommands 收集 git 的子命令,它解析 git --help -a 以获取所有 git 的子命令。
然后它为收集的 git 命令定义包装函数。

我的问题是:为什么在调用 Enable-GitAliasesgit --help -a 被调用这么多次(可能无限次),导致显着减速的原因是什么?

写完代码后,我发现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
}
}
}

关于powershell - 为什么上游命令被调用了这么多次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49724190/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com