可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
This question already has an answer here:
-
How can I redirect and append both stdout and stderr to a file with Bash?
6 answers
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?
回答1:
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
回答2:
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
回答3:
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.
回答4:
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.
回答5:
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.
回答6:
It might be the the standard error. You can redirect it:
... > out.txt 2>&1
回答7:
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.....
回答8:
Command:
foo >> output.txt 2>&1
appends to the output.txt file, without replacing the content.
回答9:
Use >>
to append:
command >> file
回答10:
In Linux Mint, this command string routed executing script and errors to a single txt file. bash -x ./setup.sh > setup.txt 2>&1
. Script name was setup.sh and output destination was setup.txt.