2

我正在尝试使用 zcat 和 diff 比较 2 个 .gz 文本文件。这是在 JunOS 机器上,所以添加新的二进制文件 (zdiff) 不是一个选项,只有有限数量的其他 shell 可用。可以添加这些东西可能是真的,但管理策略禁止这样做。csh 是默认 shell,但tcshsh也可以使用。我希望能够将挂起的提交文件 (juniper.conf+.gz) 与 /config 目录中的当前配置文件 (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

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

在csh(或其他avail shell)中是否可能有其他命令行向导可以一次性完成此操作?

提前致谢。

4

1 回答 1

0

建议的命令中的大多数功能都是特定于 bash 的,或者至少是特定于 sh 的。

如果sh真的是 Bourne shell,而不是符号链接,bash或者ksh像在许多系统上那样,你就不能使用<(command)or之类的东西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 one-liner 是:

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

(我很想建议一个以

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

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

于 2013-05-06T17:10:40.433 回答