Bash 如何从子shell打印STDERR?

Bash 如何从子shell打印STDERR?,bash,shell,pipeline,io-redirection,Bash,Shell,Pipeline,Io Redirection,使用中找到的答案,我编写了一些shell脚本,希望比较以下输出: diff <(script1 | script2) <(script3 | script4) diff来自脚本1..4的错误消息不应该消失在黑洞中;您仅将其标准输出重定向为指定给diff的文件 例如,给定以下文件: $ cat script1 #!/bin/bash echo $0 stdout echo $0 stderr >&2 $ cat script2 #!/bin/bash echo $0 s

使用中找到的答案,我编写了一些shell脚本,希望比较以下输出:

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

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

例如,给定以下文件:

$ cat script1
#!/bin/bash
echo $0 stdout
echo $0 stderr >&2
$ cat script2
#!/bin/bash
echo $0 stdout
cat -
echo $0 stderr >&2
$ cat script3
#!/bin/bash
echo $0 stdout
echo $0 stderr >&2
$ cat script4
#!/bin/bash
echo $0 stdout
cat -
echo $0 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
$
$diff./script3标准输出
$

脚本1..4中的错误消息不应该消失在黑洞中;您只将其标准输出重定向为提供给
diff
的文件。您在此处提供的代码不会将stderr重定向到任何地方,因此它将转到控制台。请测试您是否提供了足够的信息来复制您询问的任何bug。嗯,这有点奇怪:我现在似乎无法复制它。其中一个脚本肯定一直在默默地失败。我想我会将此标记为已解决。我似乎无法重现我的失败:前几天我在进行故障排除时,我的一个脚本肯定一直在默默地失败,当我传递错误的命令行选项时,我错误地认为没有传递STDERR。我担心在我想对脚本进行一些更新时会再次遇到这种情况:这让我更加放心,因为它不会默默地失败(尽管我必须重新检查一些错误检查)。