关于linux:将所有输出重定向到文件

Redirect all output to file

本问题已经有最佳答案,请猛点这里访问。

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

是否有方法将所有输出重定向到文件?


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

1
foo > stdout.txt 2> stderr.txt

或者如果您希望在同一个文件中:

1
foo > allout.txt 2>&1

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


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

command &> /some/filestrike>

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

1
*command* > file 2>&1

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

1
*command* 2> /dev/null


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

1
make 2>&1 | tee file.txt

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


用这个-"require command here"> log_file_name 2>&1

Unix/Linux中重定向操作符的详细描述。

>运算符通常将输出重定向到文件,但可以重定向到设备。还可以使用>>追加。

如果不指定数字,则假定为标准输出流,但也可以重定向错误。

1
2
3
4
> 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是一个空设备,它接受您想要的任何输入并丢弃它。它可以用来抑制任何输出。


Osexp2003和J.A.的学分

而不是

1
&>> your_file.log

排在队伍后面

1
crontab -e

我用

1
2
3
#!/bin/bash
exec &>> your_file.log

在bash脚本的开头。

优点:脚本中有日志定义。有利于Git等。


命令:

1
foo >> output.txt 2>&1

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


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

1
... > out.txt 2>&1

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

样本脚本:

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

>>附加:

command >> file


在LinuxMint中,此命令字符串将执行脚本和错误路由到单个TXT文件。埃多克斯1〔13〕。脚本名为setup.sh,输出目标为setup.txt。