我知道在 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
不是文件名,而是文件描述符。