我有一个函数,在那个函数中,我正在调用git函数:
function Confirm-GitStatus
{
# a bunch of stuff
& git --git-dir $gitDir --work-tree $basePath checkout $targetBranch 2>&1
# more stuff
return $true
}
其结果实际上是一个数组,其中包含git调用和$ true的结果。为了获得想要的结果,我必须这样做:
$disposableMessage = & git --git-dir $gitDir --work-tree $basePath checkout $targetBranch 2>&1
这感觉很糟糕。拨打电话和扔出结果的最佳做法是什么?
答案 0 :(得分:0)
您可以将命令传递给Out-Null
。
答案 1 :(得分:0)
由于您始终在使用流重定向-2>&1
将PowerShell错误流(来自git
的stderr)合并到成功流(来自stdout) )-最简单的解决方案是使用 *
将所有流($null
)重定向到*> $null
;一个简化的例子:
# Note: This command produces both stdout and stderr output.
cmd /c "echo hi & dir \nosuch" *> $null
# PowerShell Core example with Bash:
bash -c 'echo hi; ls \nosuch' *> $null
但是, 通常考虑将$null = ...
丢弃命令的(成功的)输出,因为它:
传达意图
在大多数情况下比> $null
尤其是... | Out-Null
都快。 [1]
适用于以上示例:
$null = cmd /c "echo hi & dir \nosuch" 2>&1
$null = bash -c 'echo hi; ls \nosuch' 2>&1
[1]在PowerShell Core 中,如果前面的唯一管道段是无副作用的 expression ,而不是Out-Null
,则进行优化cmdlet或函数调用;例如1..1e6 | Out-Null
几乎不会执行,因为该表达式似乎甚至没有执行。但是,这种情况是非典型的,功能上等效的Write-Output (1..1e6) | Out-Null
运行时间较长,比$null = Write-Output (1..1e6)
要长得多。