如何将bash脚本的stderr重定向到控制台和文件? 我正在使用:
exec 2>> myfile
将其记录到myfile。如何扩展它以登录到控制台?
答案 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 )