How to redirect both stdout and stderr to a file
我正在运行一个bash脚本,它创建一个日志文件来执行命令
我使用以下内容
1 2
| Command1 >> log_file
Command2 >> log_file |
这仅发送标准输出,而不是终端上显示的标准错误。
我可以记录记录到文件的stderr和stdout吗?
如果要登录同一文件:
1
| command1 >> log_file 2>&1 |
如果你想要不同的文件:
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
-
什么'&amp;'在这种情况下呢?
-
@xaxes:>&在这里是一个"令牌"。请参阅bash手册页(或整个REDIRECTION部分)的"复制文件描述符"部分。
重定向两者的最简单语法是:
如果要附加到文件而不是覆盖:
-
不确定何时添加了此运算符,但在旧版本的Bash中可能无法使用它。它似乎正在我的机器上工作,运行Gnu bash v3.2.48。
-
@CostiCiudatu&amp; >>运算符似乎不适用于Mac OS X;更安全地使用Mat的解决方案imo。
-
@JamesFennell你是对的,我没有意识到这一点。我赞成了接受的答案:)
-
对于Bash 4+,有一个版本可以管道到另一个命令:|&。请参阅有关此问题的评论。
-
&>现在在OS X 10.11.1(似乎是bash 3.2)上按预期工作,仅用于记录。
-
tldp.org/LDP/abs/html/io-redirection.html提到这个语法功能"从Bash 4开始,最终版本"。
-
我相信在任何shell中附加但Bash> v3.2你需要使用:command >> logfile 2>&amp; 1
-
$(命令2>&amp; 1)在bash 4.3.48(1)中工作,但$(command&amp;>)不能。
-
I + 1。最后,bash匹配tcsh中旧command >& logfile的简洁性。我现在几乎可以现在换壳了!
你可以像2>&amp; 1那样做:
-
+1,2>&1将文件描述符2(stderr)重定向到文件描述符1(stdout)
使用:
1
| command >>log_file 2>>log_file |
请使用command 2>file
这里2代表stderr的文件描述符。 您还可以使用1而不是2,以便将stdout重定向到"文件"