将stderr重定向到多个流

时间:2017-07-05 20:21:33

标签: bash

我试图了解Bash脚本的一部分是如何工作的。相关代码是:

sqlprogram -f $filename.sql > $date.log 2>&1

如果sqlprogram -f $filename.sql部分没有错误,那么stdout的内容会写入$date.log,但如果有错误,那么{{ 1}}写入stderr。基本上,$date.logstderr中的一个写入stdout。这是对的吗?

如何将$date.log重定向到另一个文件,说stderr?我试过和$errorlog.file一起玩,但有点挣扎

2 个答案:

答案 0 :(得分:1)

命令:

sqlprogram -f "$filename.sql"  >info.log 2>error.log

会将stdout重定向到info.log个文件,将stderr重定向到error.log个文件。

命令2>&1的一部分告诉shell将stderr(文件描述符2)重定向到文件描述符1stdout)。

要将stdout重定向到info.log,将stderr重定向到info.logerror.log,您可以使用此功能:

sqlprogram -f "$filename.sql"  >info.log 2> >(tee error.log)

答案 1 :(得分:1)

>重定向标准输出,2>&1将标准错误重定向到标准输出。所有输出(无论是否有错误)都会转到指定的文件,以及通常打印到stderr的任何内容 - 通常是错误,但某些程序还会向stderr输出警告,诊断消息或调试信息

如果要将stderr保存到其他文件,请使用

program > $date.log 2> different-file

要将stderr保存到stdout 不同的文件,请使用

program > log 2> >(tee different-file >&1)

要将stdout保存到文件并将stderr输出到自身和其他文件,请使用

program > log 2> >(tee different-file >&2)