Bash

為什麼即使我將 Bash 腳本重定向到 stderr,它仍會輸出到 stdout?

  • October 22, 2021

我有一個 Bash 腳本:

#!/bin/bash
echo this should be visible only in the stderr output but it is not 1>&2
exit 0

另外,我有一個啟動此腳本的自定義應用程序。該應用程序同時擷取 - stdout 和 stderr。標準輸出為空,標準錯誤包含提供的文本。到目前為止,一切都很好。但是當我從控制台(物理終端)啟動腳本時:

./my_script.sh

我希望它不會在顯示器上列印任何東西,但它會列印。我嘗試了各種重定向組合,例如 、>&2>/dev/stderr,但結果是相同的。我還嘗試將 stdout 重定向到 null 1>&2 >/dev/null,但顯然它也會將我的文本發送到 null 。

這是在哪裡配置的?如何讓我的終端不顯示標準錯誤?

要阻止腳本將其標準錯誤流發送到終端,您需要將其重定向到/dev/null文件。

您可以通過在命令行上使用重定向的標準錯誤流呼叫腳本或讓腳本本身重定向其錯誤流來執行此操作。

要將錯誤流重定向到/dev/null命令行,請使用以下命令呼叫腳本

./my_script 2>/dev/null

如果您希望腳本自動丟棄其標準錯誤流,則將流重定向到/dev/null腳本內:

#!/bin/bash

# Discard any diagnostic output, errors, and interactive prompts.
exec 2>/dev/null

echo 'This should not be visible.' >&2
echo 'This should be visible.'

更改/dev/null為文件的路徑名以將診斷輸出傳遞給該文件。

標準輸出流不受標準錯誤流重定向/dev/null到文件的影響。

請注意,腳本通常不應以exit 0.

引用自:https://unix.stackexchange.com/questions/674370