2013-05-06 2 views
2

zcat과 diff를 사용하여 2 .gz 텍스트 파일을 비교하려고합니다. 이것은 JunOS 상자에 있으므로 새 바이너리 (zdiff)를 추가하는 것은 옵션이 아니며 제한된 수의 다른 쉘만 사용할 수 있습니다. 이러한 사항을 추가 할 수는 있지만 관리 정책에 따라이를 금지 할 수 있습니다. csh가 기본 쉘이지만 tcshsh도 사용할 수 있습니다. 보류중인 커밋 파일 (juniper.conf + .gz)을/config 디렉토리의 현재 구성 파일 (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 

(나는 완전히로 시작하는 명령을 이해하지 않는 것이) 메시지 "리디렉션에없는 이름"을 생산했다.

csh (또는 다른 avail 셸)에서 한 번에이 작업을 수행하는 다른 명령 행보가있을 수 있습니까?

미리 감사드립니다.

답변

0

제안 된 명령의 대부분의 기능은 bash 또는 적어도 sh 이상입니다. 와 CSH 그냥 같은 기능을 가지고 있지 않습니다 - 그것은 많은 시스템에, 당신은 <(command) 또는 3<&0 같은 것들을 사용할 수 있습니다로

sh 경우 정말 bash 또는 ksh에 Bourne 쉘, 그리고 심볼릭 링크입니다.

이 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 

을; 이 작업을 수행하는 CSH 한 줄은 다음과 같습니다

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

로 시작하는 CSH 한 줄을 제안하는 유혹 해요하지만 당신은 아마에 소스에서 떠들썩한 파티를 만들 수 없습니다 JunOS.)

+1

응답 해 주셔서 감사합니다. 당신의 첫 번째 제안은 정말 충분합니다. 나는 좀 더 복잡한 것을 찾으려고했지만, 실제로는 한 줄로 된 별도의 명령으로 완벽하게 받아 들일 만하다. (한 걸음 씩 느낀다.) 방금 내 머리를 재조정해야했습니다. 두 번째 제안은 효과가 없습니다./dev/fd/3 파일은 없습니다 (필자는 확실히 쉘 스크립터가 아닙니다). 나는/dev/fd에 대해 이야기했지만 TLDR에 관한 기사를 발견했다. 마지막으로, bash를 설치/빌드하라는 제안은 훌륭 하겠지만 슬프게도 우리의 프로덕션 네트워크에는 없습니다. 다시 한 번 감사드립니다! – hrtednrup

관련 문제