ksh 스크립트의 구문 오류: '2'는 필요하지 않습니다.

ksh 스크립트의 구문 오류: '2'는 필요하지 않습니다.

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. fanouta와 a의 차이점을 설명할 수 있다면섬기는 사람그리고좀 더 명확한 코드를 제안할 수도 있습니다. 그러나 나의 첫 번째 제안은 다음과 같습니다.

ears='ear1,ear2'
cluster=abc
dmgr=server1

fanout "$dmgr" "/appl/as/bin/md5 /appl/as/var/spool/ears/${cluster}/{$ears}"

관련 정보