將錯誤訊息列印到 stderr

錯誤訊息通常包含在指令碼中,用於除錯目的或提供豐富的使用者體驗。只需編寫如下錯誤資訊:

cmd || echo 'cmd failed'

可能適用於簡單的情況,但這不是通常的方式。在此示例中,錯誤訊息將通過混合 stdout 中的錯誤和成功輸出來汙染指令碼的實際輸出。

簡而言之,錯誤資訊應該傳送到 stderr 而不是 stdout。這很簡單:

cmd || echo 'cmd failed' >/dev/stderr

另一個例子:

if cmd; then
    echo 'success'
else
    echo 'cmd failed' >/dev/stderr
fi

在上面的示例中,成功訊息將列印在 stdout 上,而錯誤訊息將列印在 stderr 上。

列印錯誤訊息的更好方法是定義一個函式:

err(){
    echo "E: $*" >>/dev/stderr
}

現在,當你必須列印錯誤時:

err "My error message"