将错误消息打印到 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"