Unix 시스템에서 일부 귀의 MD5를 가져오기 위해 이 명령을 사용하려고 하는데 fanout
일부 오류가 발생합니다.
내 코드는 다음과 같습니다
ears=ear1-ear2
cluster=abc
dmgr=server1
k=$(expr `echo $ears | grep -o "-" | wc -l` + 1)
fanout "$dmgr" " umask 022 ; for k in $(seq 1 $k) ; do for i in $(echo $ears | cut -d'-' -f$k) ; do echo /appl/as/bin/md5 /appl/as/var/spool/ears/${cluster}/$i ; done ; done
내가받는 오류는 다음과 같습니다.
ksh: 0403-057 Syntax error at line 2 : `2' is not expected.
및 참조할 수 없습니다.$i
답변1
$(seq 1 $k)
이 오류는 명령 내부의 보간 으로 인해 발생합니다 fanout
.
설명하자면...
실행 seq 1 2
결과:
1
2
큰따옴표 안에 넣으면 개행 문자가 중요한 텍스트로 유지됩니다. 따라서 fanout 명령은 다음과 같이 평가됩니다.
fanout server1 'umask 022 ; for k in 1
2 ; do for i in ear2 ; do echo /appl/as/bin/md5 /appl/as/var/spool/ears/abc/ ; done ; done'
두 번째 줄의 내용을 이해 ksh
하지 못 2
하므로 실패합니다.
를 포함하여 이 문제를 해결할 수 있지만 xargs
두 번째 잠재적인 문제에 직면하게 됩니다. 즉, 이를 k
루프 카운터로 사용하지만 $k
루프가 실행되기 전에 평가해야 한다는 것입니다. 또한 스크립트가 실행되기 전에 평가해야 하는 하위 셸이 있지만 $ears
런타임 시 변경되는 루프에서 사용됩니다.
내가 하나 찾았어매뉴얼 페이지그러나 fanout
여러 시스템에 대해 실행하는 명령이 있는데 왜 단일 시스템()에 대해 루프를 실행하려는지 이해할 수 없습니다 server1
. fanout
a와 a의 차이점을 설명할 수 있다면섬기는 사람그리고귀좀 더 명확한 코드를 제안할 수도 있습니다. 그러나 나의 첫 번째 제안은 다음과 같습니다.
ears='ear1,ear2'
cluster=abc
dmgr=server1
fanout "$dmgr" "/appl/as/bin/md5 /appl/as/var/spool/ears/${cluster}/{$ears}"