要将标准输出重定向到Bash中的截断文件,我知道要使用:

cmd > file.txt

要重定向Bash中的标准输出,将其附加到文件,我知道要使用:

cmd >> file.txt

要将标准输出和标准错误重定向到截断的文件,我知道可以使用:

cmd &> file.txt

如何将标准输出和标准错误附加重定向到文件?cmd&>>file.txt对我不起作用。


当前回答

在Bash中,您还可以明确指定指向不同文件的重定向:

cmd >log.out 2>log_error.out

附录应为:

cmd >>log.out 2>>log_error.out

其他回答

另一种方法:

如果在&>>不可用的地方使用旧版本的Bash,您还可以执行以下操作:

(cmd 2>&1) >> file.txt

这产生了一个子shell,因此它的效率低于传统的cmd>>file.txt 2>&1方法,因此它不适用于需要修改当前shell的命令(例如cd、pushd),但这种方法对我来说更自然、更容易理解:

将标准错误重定向到标准输出。通过附加到文件来重定向新的标准输出。

此外,括号消除了顺序的任何歧义,特别是如果您希望将标准输出和标准错误传输到另一个命令。

为了避免启动子shell,您可以使用大括号代替括号来创建组命令:

{ cmd 2>&1; } >> file.txt

(请注意,终止组命令需要分号(或换行符)。)

在Bash 4(以及Z外壳(zsh)4.3.11)中:

cmd &>> outfile

只是开箱即用。

cmd >>file.txt 2>&1

Bash从左到右执行重定向,如下所示:

>>file.txt:以追加模式打开file.txt并将stdout重定向到那里。2> &1:将stderr重定向到“stdout当前所在位置”。在本例中,这是一个以追加模式打开的文件。换句话说,&1重用stdout当前使用的文件描述符。

在Bash中,您还可以明确指定指向不同文件的重定向:

cmd >log.out 2>log_error.out

附录应为:

cmd >>log.out 2>>log_error.out

这应该很好:

your_command 2>&1 | tee -a file.txt

它会将所有日志存储在file.txt中,并将其转储到终端中。