2013-05-06 49 views
2

我想比較使用zcat和diff的2個.gz文本文件。這是在JunOS盒子上,所以添加新的二進制文件(zdiff)不是一個選項,只有有限數量的其他shell可用。這些事情可能會增加,但管理政策禁止這樣做。 csh是默認的外殼,但是tcshsh也可以使用。我希望能夠在/ config目錄中將待處理的提交文件(juniper.conf + .gz)與當前配置文件(juniper.conf.gz)進行比較。csh一個班輪來比較2個壓縮文本文件

我讀過類似

diff <(zcat juniper.conf+.gz) <(zcat juniper.conf.gz) 

會的工作,但顯然這是唯一的慶典利用。

此,

zcat juniper.conf+.gz | { zcat juniper.conf.gz | diff /dev/fd/3 - ; } 3<&0 

產生的消息「爲重定向缺失名稱」(不,我完全理解與開始命令)。

可能有其他命令行wizzardry在csh(或其他有效的shell)中一次性執行此操作?

在此先感謝。

回答

0

建議命令中的大多數功能都是特定於bash的,或者至少是sh。

如果sh真的是Bourne shell的,而不是一個符號鏈接bashksh,因爲它是在許多系統上,您不能使用的東西像<(command)3<&0 - 和csh根本就沒有這樣的功能。

這應該與CSH工作:

zcat juniper.conf+.gz > 0 ; zcat juniper.conf.gz > 1 ; diff 0 1 ; rm 0 1 

或者你可以嘗試你的第二個命令:

zcat juniper.conf+.gz | { zcat juniper.conf.gz | diff /dev/fd/3 - ; } 3<&0 

與SH; csh的一個班輪,這是否是:

sh -c 'zcat juniper.conf+.gz | { zcat juniper.conf.gz | diff /dev/fd/3 - ; } 3<&0' 

(我很想建議csh的一個班輪與

wget ftp://ftp.gnu.org/gnu/bash/bash-4.2.tar.gz && ... 

開始,但你可能無法從源代碼編譯的bash Junos。)

+1

謝謝你的迴應。你的第一個建議是非常充分的。我試圖找到更復雜的東西,但實際上只是將它們作爲單獨一行中的單獨命令來完全接受(感覺就像是一步)。你只需要重新調整我的頭。第二個建議沒有奏效。沒有/ dev/fd/3文件(我當然沒有shell腳本,顯然);我找到了一篇討論/ dev/fd但TLDR的文章。最後,安裝/構建bash的建議將非常棒,但遺憾的是,我們的生產網絡上沒有這個建議。再次感謝! – hrtednrup 2013-05-06 17:40:20