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

发布于 2024-11-19 16:01:47 字数 131 浏览 4 评论 0原文

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

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

I know that in Linux, to redirect output from the screen to a file, I can either use the > or tee. However, I'm not sure why part of the output is still output to the screen and not written to the file.

Is there a way to redirect all output to file?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

吐个泡泡 2024-11-26 16:01:48

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

示例脚本:

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

You can use exec command to redirect all stdout/stderr output of any commands later.

sample script:

exec 2> your_file2 > your_file1
your other commands.....
旧伤慢歌 2024-11-26 16:01:48

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

... > out.txt 2>&1

It might be the standard error. You can redirect it:

... > out.txt 2>&1
不离久伴 2024-11-26 16:01:48

命令:

foo >> output.txt 2>&1

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

Command:

foo >> output.txt 2>&1

appends to the output.txt file, without replacing the content.

怼怹恏 2024-11-26 16:01:48

使用 >> 附加:

command >>文件

Use >> to append:

command >> file

情何以堪。 2024-11-26 16:01:47

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

foo > stdout.txt 2> stderr.txt

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

foo > allout.txt 2>&1

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

That part is written to stderr, use 2> to redirect it. For example:

foo > stdout.txt 2> stderr.txt

or if you want in same file:

foo > allout.txt 2>&1

Note: this works in (ba)sh, check your shell for proper syntax

深巷少女 2024-11-26 16:01:47

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

$command &> /some/file

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

$command > file 2>&1 

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

$command 2> /dev/null

All POSIX operating systems have 3 streams: stdin, stdout, and stderr. stdin is the input, which can accept the stdout or stderr. stdout is the primary output, which is redirected with >, >>, or |. stderr is the error output, which is handled separately so that any exceptions do not get passed to a command or written to a file that it might break; normally, this is sent to a log of some kind, or dumped directly, even when the stdout is redirected. To redirect both to the same place, use:

$command &> /some/file

EDIT: thanks to Zack for pointing out that the above solution is not portable--use instead:

$command > file 2>&1 

If you want to silence the error, do:

$command 2> /dev/null
千紇 2024-11-26 16:01:47

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

make 2>&1 | tee file.txt

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

To get the output on the console AND in a file file.txt for example.

make 2>&1 | tee file.txt

Note: & (in 2>&1) specifies that 1 is not a file name but a file descriptor.

倥絔 2024-11-26 16:01:47

使用此 - “此处需要命令”> log_file_name 2>&1

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

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

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

> 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 是空设备,它接受您想要的任何输入并将其丢弃。它可用于抑制任何输出。

Use this - "require command here" > log_file_name 2>&1

Detail description of redirection operator in Unix/Linux.

The > operator redirects the output usually to a file but it can be to a device. You can also use >> to append.

If you don't specify a number then the standard output stream is assumed but you can also redirect errors

> 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 is the null device it takes any input you want and throws it away. It can be used to suppress any output.

脱离于你 2024-11-26 16:01:47

感谢 osexp2003 和 ja ...


我没有将:

&>> your_file.log

放在一行 in: 后面,

crontab -e

使用:

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

而是在 BASH 脚本的开头

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

Credits to osexp2003 and j.a. …


Instead of putting:

&>> your_file.log

behind a line in:

crontab -e

I use:

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

at the beginning of a BASH script.

Advantage: You have the log definitions within your script. Good for Git etc.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文