powershell 如何在Linux上通过pwsh写入文件描述符3

okxuctiv  于 2022-11-10  发布在  Shell
关注(0)|答案(1)|浏览(128)

我在Linux上使用pwsh来运行一些特定的PowerShell模块。
我想将收到的数据输出到文件描述符3。我想要文件描述符3上的数据,因为PowerShell不遵守stdout是数据,而stderr是日志的约定。我希望文件描述符3充当我们的“数据”文件描述符。
最终目标是能够在我们将此PowerShell调用 Package 在Python中时执行类似的操作,并且我们自己将重定向文件描述符3数据
pwsh -f script.ps1 3>data

5sxhfpxr

5sxhfpxr1#

除了stdout(1)和stderr(2)之外,PowerShell没有其他内置方法可以输出到流。

  • 可以想象*,您可以使用.NET API和/或P/Invoke调用来执行您自己的输出行为,但这会很麻烦。

但是,这可能不是必需的:

  • 不幸的是,PowerShell在默认情况下alloutput streams的输出发送到stdout-请参见GitHub issue #7989-如果您在调用方应用2>重定向,您可以将PowerShell错误流重定向到stderr,*。

下面的调用(例如来自bash)演示了这一点:


# Prints just 'hi', because the error-stream output was

# redirected to stderr thanks to 2>, and due to targeting /dev/null, suppressed.

pwsh -noprofile -c '"hi"; Write-Error no!' 2>/dev/null

缺点是,如果您也想打印stderr输出,则必须将其捕获到文件中并在之后打印,这意味着(A)它在生成时不会出现,(B)因此不会与任何stdout输出正确交错。
顺便说一句:

  • PowerShell CLI的当前行为(从v7.2.x开始)不仅在输出流的Map方式方面令人遗憾,还因为它默认加载profile files*。
  • 讨论了提供单独的CLI来解决后一个问题,在这种情况下,流Map行为也可以修复,但到目前为止还没有发生任何事情:参见GitHub issue #8072

相关问题