在 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)