将stderr重定向到控制台和文件

时间:2012-08-09 08:01:35

标签: bash shell stderr

如何将bash脚本的stderr重定向到控制台和文件? 我正在使用:

exec 2>> myfile

将其记录到myfile。如何扩展它以登录到控制台?

6 个答案:

答案 0 :(得分:4)

例如:

exec 2>&1 | tee myfile

答案 1 :(得分:1)

或者您可以使用tail -f

$ touch myfile
$ tail -f myfile &
$ command 2>myfile

答案 2 :(得分:0)

尝试在后台通过另一个命令(如cat)打开该文件。

exec 2>> myfile
cat myfile & >&2
CAT_PID=$!
... # your script
kill $CAT_PID

答案 3 :(得分:0)

您可以创建一个fifo

$ mknod mypipe p
让tee从fifo读取。它写入stdout和您指定的文件

$ tee myfile <mypipe &
[1] 17121

现在运行命令并将stderr管道传输到fifo

$ ls kkk 2>mypipe 
ls: cannot access kkk: No such file or directory
[1]+  Done                    tee myfile < mypipe

答案 4 :(得分:0)

您可以将输出重定向到流程,并在该流程中使用tee

#!/usr/bin/env bash

exec 2> >( tee -a err.log )

echo bla >&2

答案 5 :(得分:0)

@mpapis's answer上构建的纯Bash解决方案:

<div class='outer'>
    <div class='inner1'></div>
    <div class='inner2'></div>
</div>

并扩展:

exec 2> >( while read -r line; do printf '%s\n' "${line}" >&2; printf '%s\n' "${line}" >> err.log; done )