csh one liner来比较2个压缩文本文件

时间:2013-05-06 17:05:40

标签: unix csh

我正在尝试使用zcat和diff比较2 .gz文本文件。这是在JunOS框上,因此添加新的二进制文件(zdiff)不是一个选项,只有有限数量的其他shell可用。可能确实可以添加这些内容,但管理员政策禁止这样做。 csh是默认shell,但 tcsh sh 也可以使用。我希望能够将/ config目录中的挂起提交文件(juniper.conf + .gz)与当前配置文件(juniper.conf.gz)进行比较。

我读过类似

的内容
diff <(zcat juniper.conf+.gz) <(zcat juniper.conf.gz)

会起作用,但显然只对bash有用。

此,

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

产生了“缺少重定向名称”的消息(并不是我完全理解开头的命令)。

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

提前致谢。

1 个答案:

答案 0 :(得分: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
with sh;执行此操作的csh one-liner是:

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 && ...

但你可能无法在JunOS上从源代码构建bash。)