如何将stdout和stderr都重定向到文件[重复]

Posted

技术标签:

【中文标题】如何将stdout和stderr都重定向到文件[重复]【英文标题】:How to redirect both stdout and stderr to a file [duplicate] 【发布时间】:2011-11-23 12:39:20 【问题描述】:

我正在运行一个 bash 脚本,该脚本会为执行命令创建一个日志文件

我使用以下

Command1 >> log_file
Command2 >> log_file

这只会发送标准输出,而不是终端上出现的标准错误。

【问题讨论】:

【参考方案1】:

如果你想登录到同一个文件:

command1 >> log_file 2>&1

如果你想要不同的文件:

command1 >> log_file 2>> err_file

【讨论】:

为了避免其他人感到沮丧,请注意顺序很重要:2>&1 需要出现在>> log_file 之后。 为什么是>> 而不是> >> 附加到文件,> 覆盖。搜索“shell重定向”了解更多详情。 查看而不是保存 log_file 的变体,例如当make 吐出一万个滚出屏幕的错误时:vi <(make 2>&1). 并查看输出,同时将其保存到文件中:command 2>&1 | tee log_file【参考方案2】:

重定向两者的最简单语法是:

command &> logfile

如果你想追加到文件而不是覆盖:

command &>> logfile

【讨论】:

不确定何时添加此运算符,但它可能在旧版本的 Bash 中不可用。它似乎在我运行 Gnu bash v3.2.48 的机器上运行。 @CostiCiudatu &>> 运算符似乎在 Mac OS X 中不起作用;使用 Mat 的解决方案更安全。 @JamesFennell 你是对的,我没有意识到这一点。我赞成接受的答案:) &> 现在可以在 OS X 10.11.1(似乎是 bash 3.2)上按预期工作,仅供记录。 tldp.org/LDP/abs/html/io-redirection.html 提到此语法“从 Bash 4 最终版本开始”具有功能。【参考方案3】:

你可以这样做 2>&1:

 command > file 2>&1

【讨论】:

+1, 2>&1 将文件描述符 2 (stderr) 重定向到文件描述符 1 (stdout) 这里为什么需要一个 & 符号?即为什么是 2>&1 而不是 2>1? @btomtom5 & 表示文件描述符。否则如何写入名为1 的文件?【参考方案4】:

用途:

command >>log_file 2>>log_file

【讨论】:

【参考方案5】:

请使用command 2>file 这里2代表stderr的文件描述符。您也可以使用 1 代替 2 以便 stdout 被重定向到“文件”

【讨论】:

以上是关于如何将stdout和stderr都重定向到文件[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将 cout 和 stdout 都重定向到 C++ 中的字符串以进行单元测试

如何将时间戳添加到 cronjob 输出的行并将 stdout 和 stderr 重定向到不同的进程和/或文件

如何在实时输出的同时将命令的 stdout 和 stderr 重定向到控制台和日志文件?

sh 将stderr和stdout重定向到文件

使用系统命令将stdout和stderr输出重定向到文件在perl中不起作用[重复]

命令输出(stdout,stderr)未重定向到管道