我怎样才能重定向并追加stdout和stderr到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

    对于良好的编码风格,你应该

  • 决定可移植性是否值得关注(然后使用经典方法)
  • 决定是否对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


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

    cmd >log.out 2>log_error.out
    

    追加将是:

    cmd >>log.out 2>>log_error.out
    
    链接地址: http://www.djcxy.com/p/5921.html

    上一篇: How can I redirect and append both stdout and stderr to a file with Bash?

    下一篇: What is output buffering?