协慌网

登录 贡献 社区

将所有输出重定向到 Bash 中的文件

我知道在 Linux 中,要将输出从屏幕重定向到文件,我可以使用>tee 。但是,我不确定为什么部分输出仍会输出到屏幕上而不写入文件。

有没有一种方法可以将所有输出重定向到文件?

答案

该部分已写入 stderr,请使用2>将其重定向。例如:

foo > stdout.txt 2> stderr.txt

或者,如果您要在同一文件中:

foo > allout.txt 2>&1

注意:这在(ba)sh 中有效,请检查您的 Shell 语法是否正确

所有 POSIX 操作系统都有 3 个流:stdin,stdout 和 stderr。 stdin 是输入,可以接受 stdout 或 stderr。 stdout 是主要输出,使用>>>| 。 stderr 是错误输出,将对其进行单独处理,以使任何异常都不会传递到命令或写入可能会中断的文件中;通常,即使重定向了 stdout,它也将发送到某种日志或直接转储。要将两者重定向到同一位置,请使用:

<em>command</em> &> /some/file

编辑:感谢 Zack 指出上述解决方案不是可移植的 - 而是使用:

*command* > file 2>&1

如果要使错误静音,请执行以下操作:

*command* 2> /dev/null

例如,要在控制台上并在文件file.txt获取输出。

make 2>&1 | tee file.txt

注意: & (在2>&1 )指定1不是文件名而是文件描述符。