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

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

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

1240400 次浏览

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

foo > stdout.txt 2> stderr.txt

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

foo > allout.txt 2>&1

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

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

... > out.txt 2>&1

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

$command &> /some/file

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

$command > file 2>&1

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

$command 2> /dev/null

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

make 2>&1 | tee file.txt

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

使用>>追加:

command >> file

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

示例脚本:

exec 2> your_file2 > your_file1your other commands.....

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

Unix/Linux中重定向运算符的详细描述。

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

如果您没有指定一个数字,则假设标准输出流,但您也可以重定向错误

> file redirects stdout to file1> file redirects stdout to file2> file redirects stderr to file&> file redirects stdout and stderr to file

/dev/null是空设备,它接受任何你想要的输入并将其丢弃。它可用于抑制任何输出。

命令:

foo >> output.txt 2>&1

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

这是OSEXP2003和J. A.


而不是把:

&>> your_file.log

在一条线后面:

crontab -e

我使用:

#!/bin/bashexec &>> your_file.log…

BASH脚本的开头。

优点:您的脚本中有日志定义。适用于Git等。