如何从子shell打印STDERR



使用在How can you diff two pipeline in Bash中找到的答案?我已经写了一些shell脚本,我想比较的输出

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

但是,在子shell管道中的任何脚本中打印到STDERR的任何错误都将消失。如何让它们在我的外部脚本(包含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
$

最新更新