我想将流程的标准输出和标准错误重定向到单个文件。我在巴什怎么做?


当前回答

对于tcsh,我必须使用以下命令:

command >& file

如果使用命令&>文件,它将给出“无效空命令”错误。

其他回答

我想要一个解决方案,将stdout和stderr的输出写入日志文件,并且stderr仍在控制台上。所以我需要通过tee复制stderr输出。

这是我找到的解决方案:

command 3>&1 1>&2 2>&3 1>>logfile | tee -a logfile

第一次交换stderr和stdout然后将stdout附加到日志文件将stderr管道到tee,并将其附加到日志文件中

在考虑使用exec2>&1之类的情况下,如果可能的话,我发现使用如下Bash函数重写代码更容易阅读:

function myfunc(){
  [...]
}

myfunc &>mylog.log

奇怪的是,这是有效的:

yourcommand &> filename

但这会产生语法错误:

yourcommand &>> filename
syntax error near unexpected token `>'

您必须使用:

yourcommand 1>> filename 2>&1

您可以将stderr重定向到stdout,并将stdout重定向到文件中:

some_command >file.log 2>&1

见第20章。I/O重定向

这种格式比最流行的仅适用于Bash的&>格式更受欢迎。在Bourne shell中,它可以解释为在后台运行命令。格式也更可读-2(标准错误)重定向为1(标准输出)。

看看这里。应该是:

yourcommand &> filename

它将标准输出和标准错误重定向到文件名。