将stderr重定向到错误处理程序

时间:2015-08-23 23:17:21

标签: linux bash error-handling io-redirection

是否可以将stderr消息传递给错误处理函数并让它决定如何处理消息? 一个简单的例子是如果一个脚本,如果用户给foo.bar不存在的文件复制或只给它一个输入参数。我不想立即打印系统错误消息,而是先打印一些附加信息。也可以将它发送到log.txt。

这是我到目前为止所想到的,但它似乎不起作用。

#foo.bar
function errhand
{
  read IN #read stdout which has stderr redirected.
  echo "an error occurred while copying." | tee -a log.txt
  echo $IN | tee -a log.txt
}

cp $1 $2 || errhand 2>&1   #redirect stder to stdout if error occurs.

1 个答案:

答案 0 :(得分:1)

您可以将cp命令的标准错误重定向到errhand,如果没有要输出的文本,则可以返回。

errhand () {
    read errormsg
    [[ -z $errormsg ]] && return
    { echo "an error occurred"
      echo "$IN"
    } | tee -a log.txt
}

cp "$1" "$2" 2> >(errhand)