正确打印错误消息的方法

Rob*_*ino 5 bash

这行是在Bash中打印错误消息的最佳方法吗?

echo 'Error: banana' >&2
Run Code Online (Sandbox Code Playgroud)

我需要更新数十种使用所有不同方式记录错误的Bash脚本,我不妨选择“正确”的方法来做到这一点,并遵循我所遵循的标准...

uml*_*ute 7

在我的bash脚本开始时,我通常定义一些函数,例如:

error() {
  echo "$@" 1>&2
}

fail() {
  error "$@"
  exit 1
}
Run Code Online (Sandbox Code Playgroud)

这对于输出致命的和普通的错误非常方便。您可以将该代码段移到一个单独的文件中,并将source其从所有bash脚本中移至一个文件中,如下所示:

. /usr/local/lib/snippets/error_handling.sh
Run Code Online (Sandbox Code Playgroud)

因此,只要您决定需要一种更好的方法来处理错误消息(例如,将严重错误发送到syslog),就可以通过一次性更改所有脚本的行为来实现。


seh*_*ehe 5

在linux上,我更愿意说

echo "Some error message" >> /dev/stderr
Run Code Online (Sandbox Code Playgroud)

当然,由于/dev/stderr符号链接到/proc/$PID/fd/2