如何将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 重定向到控制台和日志文件?