为什么上游命令被多次调用?

山本雄司

当前,我正在编写一个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
}
stknohg

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么多次调用contextInitialized()?

为什么FutureBuilder被多次调用?

为什么BeginContact被多次调用?

为什么paintComponent()被多次调用?

为什么多次调用viewDidLayoutSubviews?

为什么JSF多次调用getter

为什么LocationManager会多次调用startUpdatingLocation?

删除方法被调用太多次。为什么?

为什么不能多次调用变异函数?

为什么范围函数被多次调用?

为什么状态流会多次调用 callectLatest?

为什么这个componentDidMount()被调用多次?

为什么多次调用 setState() 时状态不能正确更新

为什么我在 React 中的组件被多次调用?

C中的HTTP:为什么必须多次调用recv()?

为什么在Topshelf中多次调用Stop方法

为什么在使用 futureBuilder 时多次调用我的 getRoute() 函数?

为什么 Recyclerview 适配器 onBindViewHolder 被多次调用?

为什么每个[TestMethod]都会多次调用[TestClass]的构造函数?

为什么 Looper 类中的 loop() 被多次调用

为什么多次调用此控制器功能

多次调用setRightBarButtonItems:animated时崩溃:为什么?

为什么用React Fibre多次调用componentWillMount?

为什么请求facelet时多次调用BackingBean方法?

为什么我的回调使用Redux多次调用

为什么应该使用预测输入多次调用ChangeTextInRange?

流星:为什么Iron Router的onBeforeAction会被多次调用?

为什么我的NSNotification的观察者多次被调用?

为什么沃森的《语音翻译》被多次调用