我pwsh在 linux 上使用來運行一些特定的 powershell 模塊。
我想將接收到的資料輸出到檔案描述符 3。我想要檔案描述符 3 上的資料,因為 Powershell 不遵守 stdout 是資料而 stderr 正在記錄的約定。我希望檔案描述符 3 作為我們的“資料”檔案描述符。
最終目標是能夠做這樣的事情,因為我們用 Python 包裝這個 powershell 呼叫,我們將自己重定向檔案描述符 3 資料
pwsh -f script.ps1 3>data
uj5u.com熱心網友回復:
除了 stdout ( ) 和 stderr ( )之外, PowerShell沒有內置方法可以輸出到流(更多內容見下文。12
可以想象,您可以使用 .NET API 和/或 P/Invoke 呼叫來滾動您自己的輸出行為,但這會很麻煩。
但是,這可能不是必需的:
- 雖然確實 - 不幸的是 - PowerShell默認將其所有輸出流的輸出發送到stdout - 請參閱GitHub 問題 #7989 -如果您在呼叫方應用重定向,您可以將 PowerShell 錯誤流重定向到stderr。
2>
以下呼叫,例如 from 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) 因此贏了'不能與任何標準輸出正確交錯。
作為旁白:
PowerShell CLI(從 v7.2.x 開始)的當前行為令人遺憾,不僅在輸出流的映射方式方面,而且還因為它默認加載組態檔 。
有人談論提供一個單獨的 CLI 來解決后一個問題,在這種情況下,流映射行為也可以修復,但到目前為止還沒有發生任何事情:請參閱GitHub 問題 #8072。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/528441.html
