如何使用Bash将stdout和stderr重定向并附加到文件?

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

cmd > file.txt

为了重定向Bash中的stdout ,将其附加到文件中,我知道要使用:

cmd >> file.txt

要将stdoutstderr都重定向到截断的文件,我知道使用:

cmd &> file.txt

如何将stdoutstderr都重定向到文件? 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 >

请参考http://www.tldp.org/LDP/abs/html/io-redirection.html


#3楼

这应该工作正常:

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

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


#4楼

令我惊讶的是,近十年来,还没有人发布这种方法:

如果使用无法使用&>>较旧版本的bash,则还可以执行以下操作:

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

这产生了一个subshel​​l,因此它的效率不如cmd >> file.txt 2>&1的传统方法,但是这种方法对我来说更自然,更容易理解:

  1. 将stderr重定向到stdout。
  2. 通过附加到文件来重定向新的标准输出。

另外,括号消除了任何歧义的顺序,尤其是如果您想将stdout和stderr用管道传递给另一个命令时,尤其如此。


#5楼

cmd >>file.txt 2>&1

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

  1. >>file.txt :以附加模式打开file.txt在那里重定向stdout
  2. 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-hackers.org/wiki/doku.php/syntax/redirection#appending_redirected_output_and_error_output


#7楼

在Bash 4(以及ZSH 4.3.11)中:

cmd &>>outfile

开箱即用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值