我试图了解Bash脚本的一部分是如何工作的。相关代码是:
sqlprogram -f $filename.sql > $date.log 2>&1
如果sqlprogram -f $filename.sql
部分没有错误,那么stdout
的内容会写入$date.log
,但如果有错误,那么{{ 1}}写入stderr
。基本上,$date.log
和stderr
中的一个写入stdout
。这是对的吗?
如何将$date.log
重定向到另一个文件,说stderr
?我试过和$errorlog.file
一起玩,但有点挣扎
答案 0 :(得分:1)
命令:
sqlprogram -f "$filename.sql" >info.log 2>error.log
会将stdout
重定向到info.log
个文件,将stderr
重定向到error.log
个文件。
命令2>&1
的一部分告诉shell将stderr
(文件描述符2
)重定向到文件描述符1
(stdout
)。
要将stdout
重定向到info.log
,将stderr
重定向到info.log
和error.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)