&>>
的较旧版本的bash,也可以执行以下操作:将stdout重定向到Bash中的截断文件,我知道要使用:
cmd > file.txt
要在Bash中重定向stdout,附加到文件,我知道要使用:
cmd >> file.txt
要将stdout和stderr都重定向到截断的文件,我知道要使用:
cmd &> file.txt
如何重定向stdout和stderr追加到文件? cmd &>> file.txt
对我不起作用。
cmd >>file.txt 2>&1
Bash执行从左到右的重定向,如下所示:
>>file.txt
:在追加模式下打开file.txt
,然后在其中重定向stdout
。2>&1
:将stderr
重定向到“ stdout
当前所在的位置”。在这种情况下,这是在附加模式下打开的文件。换句话说,&1
重用了stdout
当前使用的文件描述符。有两种方法,具体取决于您的Bash版本。
经典和便携式(Bash pre-4)方法是:
cmd >> outfile 2>&1
以Bash 4开头的非便携式方式是
cmd &>> outfile
(模拟到&> outfile
)
为了获得良好的编码风格,您应该
如果您的脚本已经以#!/bin/sh
开头(无论是否有意使用,那么Bash 4解决方案以及通常任何Bash特定的代码都是不可行的。
还请记住,Bash 4 &>>
只是较短的语法,它没有引入任何新功能或类似功能。
语法(在其他重定向语法旁边)在这里描述:http://bash-hackers.org/wiki/doku.php/syntax/redirection#appending_redirected_output_and_error_output
在Bash中,您还可以明确指定重定向到其他文件:
cmd >log.out 2>log_error.out
附加为:
cmd >>log.out 2>>log_error.out
在Bash 4中(以及ZSH 4.3.11):
cmd &>>outfile
开箱即用
这应该可以正常工作:
your_command 2>&1 | tee -a file.txt
它将所有日志存储在file.txt中,并将其转储到终端上。
尝试一下
You_command 1>output.log 2>&1
您对&> x.file的使用在bash4中确实有效。对此表示抱歉:(
0,1,2 ... 9是bash中的文件描述符。
0代表stdin
,1代表stdout
,2代表stderror
。 3〜9可用于其他任何临时用途。
可以使用运算符>
或>>
(附加)将任何文件描述符重定向到其他文件描述符或文件。
用法:<< [文件描述符] >> > << [文件名 | &file_descriptor] >>请参考http://www.tldp.org/LDP/abs/html/io-redirection.html
&>>
的较旧版本的bash,也可以执行以下操作:(cmd 2>&1) >> file.txt
这产生了一个子shell,因此它比cmd >> file.txt 2>&1
的传统方法效率低,但是这种方法对我来说更自然,更容易理解:
将stderr重定向到stdout。