将所有输出重定向到 Bash 中的文件
我知道在 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
您可以使用 exec 命令稍后重定向任何命令的所有 stdout/stderr 输出。
示例脚本:
You can use
exec
command to redirect all stdout/stderr output of any commands later.sample script:
这可能是标准错误。您可以重定向它:
It might be the standard error. You can redirect it:
命令:
附加到output.txt文件,而不替换内容。
Command:
appends to the output.txt file, without replacing the content.
使用
>>
附加:command >>文件
Use
>>
to append:command >> file
该部分写入 stderr,使用
2>
重定向它。例如:或者如果您想在同一个文件中:
注意:这适用于 (ba)sh,请检查您的 shell 是否有正确的语法
That part is written to stderr, use
2>
to redirect it. For example:or if you want in same file:
Note: this works in (ba)sh, check your shell for proper syntax
所有 POSIX 操作系统都有 3 个流:stdin、stdout 和 stderr。 stdin 是输入,可以接受 stdout 或 stderr。 stdout 是主要输出,通过
>
、>>
或|
进行重定向。 stderr 是错误输出,它是单独处理的,以便任何异常都不会传递到命令或写入可能破坏的文件;通常,即使标准输出被重定向,这也会被发送到某种日志,或直接转储。要将两者重定向到同一位置,请使用:$command &> /some/file
编辑:感谢扎克指出上述解决方案不可移植 - 请改用:
如果您想消除错误,请执行以下操作:
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:
If you want to silence the error, do:
例如,要在控制台上获取输出并在文件
file.txt
中获取输出。注意:
&
(在2>&1
中)指定1
不是文件名而是文件描述符。To get the output on the console AND in a file
file.txt
for example.Note:
&
(in2>&1
) specifies that1
is not a file name but a file descriptor.使用此 -
“此处需要命令”> log_file_name 2>&1
Unix/Linux 中重定向运算符的详细描述。
运算符通常将输出重定向到文件,但也可以重定向到设备。您还可以使用>>追加。
如果您没有指定数字,则假定为标准输出流,但您也可以重定向错误
/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
/dev/null is the null device it takes any input you want and throws it away. It can be used to suppress any output.
感谢 osexp2003 和 ja ...
我没有将:
放在一行 in: 后面,
使用:
而是在 BASH 脚本的开头
。优点:您的脚本中有日志定义。适合 Git 等。
Credits to osexp2003 and j.a. …
Instead of putting:
behind a line in:
I use:
at the beginning of a BASH script.
Advantage: You have the log definitions within your script. Good for Git etc.