将所有输出重定向到文件

时间:2011-07-13 05:06:50

标签: linux bash io-redirection

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

有没有办法将所有输出重定向到文件?

10 个答案:

答案 0 :(得分:1078)

该部分写入stderr,使用2>重定向它。例如:

foo > stdout.txt 2> stderr.txt

或者如果你想要在同一个文件中:

foo > allout.txt 2>&1

注意:这适用于(ba)sh,检查shell是否有正确的语法

答案 1 :(得分:138)

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

<击> command &> /some/file

编辑:感谢Zack指出上述解决方案不可移植 - 请改用:

*command* > file 2>&1 

如果您想要消除错误,请执行以下操作:

*command* 2> /dev/null

答案 2 :(得分:78)

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

make 2>&1 | tee file.txt

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

答案 3 :(得分:42)

使用此功能 - "require command here" > log_file_name 2>&1

Unix / Linux中重定向运算符的详细说明。

&gt; operator通常将输出重定向到文件,但它可以是设备。您也可以使用&gt;&gt;追加。

如果您未指定数字,则会假定标准输出流,但您也可以重定向错误

> file redirects stdout to file
1> file redirects stdout to file
2> file redirects stderr to file
&> file redirects stdout and stderr to file

/ dev / null是一个空设备,它接受你想要的任何输入并抛弃它。它可以用来抑制任何输出。

答案 4 :(得分:27)

归功于osexp2003和j.a. ...

而不是放

&>> your_file.log

中的一行后面的

crontab -e

我用

#!/bin/bash
exec &>> your_file.log
…

在BASH脚本的开头。

优点:您的脚本中有日志定义。对Git等有好处。

答案 5 :(得分:15)

这可能是标准错误。你可以重定向它:

... > out.txt 2>&1

答案 6 :(得分:15)

命令:

foo >> output.txt 2>&1

附加 output.txt 文件,而不替换内容。

答案 7 :(得分:14)

您可以使用exec命令稍后重定向任何命令的所有stdout / stderr输出。

示例脚本:

exec 2> your_file2 > your_file1
your other commands.....

答案 8 :(得分:7)

使用>>追加:

command >> file

答案 9 :(得分:-3)

在Linux Mint中,此命令字符串将执行脚本和错误路由到单个txt文件。 bash -x ./setup.sh > setup.txt 2>&1。脚本名称为setup.sh,输出目标为setup.txt。