将 stderr 传送到文件和屏幕,而不将 stderr 重定向到 stdout

将 stderr 传送到文件和屏幕,而不将 stderr 重定向到 stdout

在 bash 脚本中,我想在将 stderr 传输到文件和终端的同时执行命令。但是,我希望 stderr 保留在“2”文件描述符上,以便我可以从调用此 bash 脚本的外部进程解析它。

到目前为止,我见过的所有解决方案都涉及将 stdout 与 stderr 交换,然后发送到另一个文件,例如

find /var/log 3>&1 1>&2 2>&3 | foo.file

如果我从另一个脚本调用此脚本,stderr 将转到 stdout,stdout 将转到 stderr,这对我来说不好。我尝试再次交换它们,如下所示:

find /var/log 3>&1 1>&2 2>&3 | foo.file 4>&1 1>&2 2>&4

但这不起作用。

答案1

我最终找到了解决办法,遵循了这一页。我需要重定向 stderr,然后tee将输出重定向tee回 stderr。

find /var/log 2> >(tee foo.file >&2)

相关内容