gpt4 book ai didi

powershell - 如何同时捕获外部命令输出并将其打印到终端

转载 作者:行者123 更新时间:2023-12-02 23:07:13 24 4
gpt4 key购买 nike

我可以通过管道返回吗:

$OUTPUT = $(flutter build ios --release --no-codesign | tail -1)

我想从构建中获取最后一行并显示进度,比如

$OUTPUT = $(flutter build ios --release --no-codesign | out | tail -1)

假设的 out 实用程序也会将输出发送到终端。

你知道怎么做吗?

最佳答案

注意:

  • Unix 类平台上,具有外部程序输出js2010's elegant tee /dev/tty solution是最简单的。

  • 下面的解决方案也适用于 Windows,可能对处理外部程序输出感兴趣在 PowerShell 中逐行

  • 一种通用解决方案,它也适用于 PowerShell 原生命令可以输出的复杂对象需要不同的方法:

    • PowerShell (Core) 7+ 中,使用以下命令:

      # PS v7+ only. Works on both Windows and Unix
      ... | Tee-Object ($IsWindows ? 'CON' : '/dev/tty')
    • Windows PowerShell 中,其中 Tee-Object不幸的是不支持针对CON,需要一个利用Out-Host代理函数 - 参见this answer .


PowerShell 解决方案(假设您问题中的代码是 PowerShell[1]):

我不确定 flutter 是如何报告其进度的,但以下方法可能有效:

如果所有内容都输出到stdout:

$OUTPUT = flutter build ios --release --no-codesign | % {
Write-Host $_ # print to host (console)
$_ # send through pipeline
} | select -Last 1

注意:%ForEach-Object 的内置别名, 并选择 Select-Object 的那个.

如果进度消息转到stderr:

$OUTPUT = flutter build ios --release --no-codesign 2>&1 | % {
Write-Host $_.ToString() # print to host (console)
if ($_ -is [string]) { $_ } # send only stdout through pipeline
} | select -Last 1

[1] 正如变量名中的 $ 印记赋值的 LHS= 周围的空格所证明的那样>
($OUTPUT = ),两者都无法在 bash/类似 POSIX 的 shell 中正常工作。

关于powershell - 如何同时捕获外部命令输出并将其打印到终端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59970139/

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