【问题标题】:Suppress output from non-PowerShell commands?禁止来自非 PowerShell 命令的输出?
【发布时间】:2013-05-20 14:45:08
【问题描述】:

我正在运行一个命令

hg st

然后检查它的 $LASTEXITCODE 以检查当前目录中的 mercurial 可用性。我不关心它的输出,也不想向我的用户展示它。

如何抑制所有输出、成功或错误?

由于 mercurial 不是 PowerShell 命令行开关,hg st | Out-Null 不起作用。

【问题讨论】:

    标签: powershell output


    【解决方案1】:

    Out-Null 在非 PowerShell 命令中运行良好。但是,它不会抑制STDERR 上的输出,只会在STDOUT 上抑制输出。如果您还想抑制STDERR 上的输出,则必须将该文件描述符重定向到STDOUT,然后再将输出传送到Out-Null

    hg st 2>&1 | Out-Null
    

    2> 重定向来自STDERR(文件描述符#2)的所有输出。 &1 将重定向的输出与来自STDOUT(文件描述符#1)的输出合并。然后将组合输出打印到STDOUT,管道可以将其输入管道中下一个命令的STDIN(在本例中为Out-Null)。请参阅Get-Help about_Redirection 了解更多信息。

    【讨论】:

    • 太棒了。这样可行。你能解释一下2>&1 语法的实际含义吗?
    • 2>&1 表示“将标准错误重定向到与标准输出相同的位置。”
    • @Bill_Stewart 我相信这就是我所说的,只是我分别处理了运算符的两个部分,因为其他流也可以与 STDOUT(实际上是成功输出流)合并。
    • @AnsgarWiechers - 当然。在 George Mauer 要求澄清后,我没有注意到您修改了答案。
    【解决方案2】:

    您可以做的一件有趣的事情是将输出通过管道传输到 Write-Verbose,然后您仍然可以通过使用 -Verbose 开关运行脚本来查看它。

    ping -n 2 $APP 2>&1 | Write-Verbose
    

    【讨论】:

      【解决方案3】:

      也可以这样做

      hg st *> $null
      

      Powershell suppress console output

      【讨论】:

      • 这不会抑制 STDERR,例如如果没有安装 hg
      • @GeorgeMauer 我的建议也不行。宿主环境抛出的错误不会被重定向。
      • 请注意,*> 重定向运算符在 PowerShell v3 之前不可用。
      猜你喜欢
      • 2010-11-18
      • 2021-04-20
      • 2013-05-23
      • 2014-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多