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

cmd > file.txt

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

cmd >> file.txt

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

cmd &> file.txt

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


当前回答

试试看:

You_command 1> output.log  2>&1

您对&>x.file的使用在Bash 4中确实有效。很抱歉:(

这里有一些额外的提示。

0, 1, 2, ..., 9是bash中的文件描述符。

0代表标准输入,1代表标准输出,2代表标准误差。3~9是备用的,用于任何其他临时用途。

通过使用运算符>或>>(append),可以将任何文件描述符重定向到其他文件描述符或文件。

用法:<file_descriptor>><filename|&file_descriptor>

请参阅第20章中的参考文献。I/O重定向。

其他回答

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

cmd >log.out 2>log_error.out

附录应为:

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

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

cmd &>> outfile

只是开箱即用。

这应该很好:

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

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

有两种方法可以做到这一点,具体取决于您的Bash版本。

经典的便携(Bash pre-4)方式是:

cmd >> outfile 2>&1

从Bash 4开始的一个不可移植的方法是

cmd &>> outfile

(模拟输出文件)

为了获得良好的编码风格,您应该

决定是否需要考虑可移植性(然后使用经典方法)决定是否需要考虑Bash pre-4的可移植性(然后使用经典方法)无论使用哪种语法,都不要在同一个脚本中更改它(混淆!)

如果脚本已经以#/bin/sh(无论是否有意),那么Bash 4解决方案以及任何Bash特定的代码都是不可行的。

还要记住,Bash 4&>>只是一个较短的语法,它没有引入任何新功能或类似的东西。

该语法(除其他重定向语法外)在Bash hackers wiki中进行了描述。

试试看:

You_command 1> output.log  2>&1

您对&>x.file的使用在Bash 4中确实有效。很抱歉:(

这里有一些额外的提示。

0, 1, 2, ..., 9是bash中的文件描述符。

0代表标准输入,1代表标准输出,2代表标准误差。3~9是备用的,用于任何其他临时用途。

通过使用运算符>或>>(append),可以将任何文件描述符重定向到其他文件描述符或文件。

用法:<file_descriptor>><filename|&file_descriptor>

请参阅第20章中的参考文献。I/O重定向。