将标准重定向到控制台和文件



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

exec 2>> myfile

以将其记录到我的文件。如何将其扩展到控制台?

例如:

exec 2>&1 | tee myfile

或者你可以使用tail -f

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

您可以创建 fifo

$ mknod mypipe p

让 Tee 从 FIFO 中读取。它写入标准输出和您指定的文件

$ 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

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

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

基于@mpapis的答案的纯Bash解决方案:

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

并扩展:

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

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

#!/usr/bin/env bash
exec 2> >( tee -a err.log )
echo bla >&2

相关内容

  • 没有找到相关文章

最新更新