要将stdout重定向到Bash中的截断文件,我知道使用:
cmd > file.txt
为了重定向Bash中的stdout,将其附加到文件中,我知道要使用:
cmd >> file.txt
要将stdout和stderr都重定向到截断的文件,我知道使用:
cmd &> file.txt
如何将stdout和stderr都重定向到文件?cmd &>> file.txt
对我不起作用。
#1楼
在Bash中,您还可以显式指定重定向到其他文件:
cmd >log.out 2>log_error.out
追加为:
cmd >>log.out 2>>log_error.out
#2楼
尝试这个
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>
请参考/LDP/abs/html/io-redirection.html
#3楼
这应该工作正常:
your_command 2>&1 | tee -a file.txt
它将所有日志存储在file.txt中,并将其转储到终端上。
#4楼
令我惊讶的是,近十年来,还没有人发布这种方法:
如果使用无法使用&>>
较旧版本的bash,则还可以执行以下操作:
(cmd 2>&1) >> file.txt
这产生了一个subshell,因此它的效率不如cmd >> file.txt 2>&1
的传统方法,但是这种方法对我来说更自然,更容易理解:
将stderr重定向到stdout。 通过附加到文件来重定向新的标准输出。
另外,括号消除了任何歧义的顺序,尤其是如果您想将stdout和stderr用管道传递给另一个命令时,尤其如此。
#5楼
cmd >>file.txt 2>&1
Bash执行从左到右的重定向,如下所示:
>>file.txt
:以附加模式打开file.txt
在那里重定向stdout
。2>&1
:将stderr
重定向到“stdout
当前所在的位置”。 在这种情况下,这是在附加模式下打开的文件。 换句话说,&1
重用了stdout
当前使用的文件描述符。
#6楼
有两种方法可以执行此操作,具体取决于您的Bash版本。
经典且可移植(Bash pre-4)的方式是:
cmd >> outfile 2>&1
从Bash 4开始的一种非便携式方式是
cmd &>> outfile
(类似于&> outfile
)
为了获得良好的编码风格,您应该
确定是否要考虑便携性(然后使用经典方式) 确定是否需要移植甚至是Bash pre-4的可移植性(然后使用经典方法) 无论使用哪种语法,都不要在同一脚本中更改它(混乱!)
如果您的脚本已经以#!/bin/sh
开头(无论是否使用),那么Bash 4解决方案(通常是任何Bash特定的代码)都不是可行的方法。
还请记住,Bash 4&>>
只是较短的语法-它没有引入任何新功能或类似功能。
语法(除其他重定向语法外)在此处描述: http : //bash-/wiki/doku.php/syntax/redirection#appending_redirected_output_and_error_output
#7楼
在Bash 4(以及ZSH 4.3.11)中:
cmd &>>outfile
开箱即用