如何从子 shell 打印 STDERR?

How do I print STDERR from a subshell?

使用在 How can you diff two pipelines in Bash? 中找到的答案,我编写了一些 shell 脚本,我想比较以下的输出:

diff <(script1 | script2) <(script3 | script4)

但是,在子shell 管道中的任何脚本中打印到 STDERR 的任何错误都会消失。我怎样才能让它们在我的外层脚本(包含差异)中打印?

来自脚本 1..4 的错误消息不应该消失在黑洞中;您仅将其标准输出重定向为提供给 diff.

的文件

例如,给定这些文件:

$ cat script1
#!/bin/bash
echo [=10=] stdout
echo [=10=] stderr >&2
$ cat script2
#!/bin/bash
echo [=10=] stdout
cat -
echo [=10=] stderr >&2
$ cat script3
#!/bin/bash
echo [=10=] stdout
echo [=10=] stderr >&2
$ cat script4
#!/bin/bash
echo [=10=] stdout
cat -
echo [=10=] stderr >&2
$

命令行的输出是:

$ diff <(script1 | script2) <(script3 | script4)
./script1 stderr
./script3 stderr
./script2 stderr
./script4 stderr
1,2c1,2
< ./script2 stdout
< ./script1 stdout
---
> ./script4 stdout
> ./script3 stdout
$