2015-12-21 34 views
0

使用How can you diff two pipelines in Bash?找到了答案,我寫了我要比較的輸出一些shell腳本:如何從子shell打印STDERR?

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

然而,打印到STDERR任何在子shell管道消失腳本的任何錯誤。我如何讓他們打印我的外層腳本(包含差異)?

+2

從1..4不應該消失下來黑洞腳本錯誤消息;你只是將它們的標準輸出重定向爲提供給'diff'的文件。 –

+2

您在此處輸入的代碼不會將stderr重定向到任何地方,因此它將轉到控制檯。請測試您提供的信息是否足以重現您詢問的任何錯誤。 –

+0

好吧,那有點奇怪:我現在似乎無法重現它。其中一個腳本一定是默默地失敗。我想我會把這個標記爲已解決。 – Rob

回答

2

來自腳本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 
$ 
+0

我似乎無法重現我遇到的故障:我的其中一個腳本在前一天遇到故障時一定是默默無聞,我錯誤地認爲當我傳遞錯誤的命令行選項時,STDERR未被傳遞。我擔心我會再次遇到這個問題,因爲我正在尋求對腳本進行一些更新:這讓我更安心,它不會默默地失敗(儘管我將不得不重新訪問一些錯誤檢查)。 – Rob

相關問題