使用How can you diff two pipelines in Bash?找到了答案,我寫了我要比較的輸出一些shell腳本:如何從子shell打印STDERR?
diff <(script1 | script2) <(script3 | script4)
然而,打印到STDERR任何在子shell管道消失腳本的任何錯誤。我如何讓他們打印我的外層腳本(包含差異)?
使用How can you diff two pipelines in Bash?找到了答案,我寫了我要比較的輸出一些shell腳本:如何從子shell打印STDERR?
diff <(script1 | script2) <(script3 | script4)
然而,打印到STDERR任何在子shell管道消失腳本的任何錯誤。我如何讓他們打印我的外層腳本(包含差異)?
來自腳本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
$
我似乎無法重現我遇到的故障:我的其中一個腳本在前一天遇到故障時一定是默默無聞,我錯誤地認爲當我傳遞錯誤的命令行選項時,STDERR未被傳遞。我擔心我會再次遇到這個問題,因爲我正在尋求對腳本進行一些更新:這讓我更安心,它不會默默地失敗(儘管我將不得不重新訪問一些錯誤檢查)。 – Rob
從1..4不應該消失下來黑洞腳本錯誤消息;你只是將它們的標準輸出重定向爲提供給'diff'的文件。 –
您在此處輸入的代碼不會將stderr重定向到任何地方,因此它將轉到控制檯。請測試您提供的信息是否足以重現您詢問的任何錯誤。 –
好吧,那有點奇怪:我現在似乎無法重現它。其中一個腳本一定是默默地失敗。我想我會把這個標記爲已解決。 – Rob