2016-11-11 4 views
1

두 개의 매개 변수가 파이프로 구분 된 testfile이 있습니다.ssh 쉘 스크립트에서 로컬 맵을 반복합니다.

vi testFile 
1|A 
2|B 
3|C 
4|D 
5|E 

나는지도를 만들고 for 루프에서 실행, 아래에 노력하고 있어요 : 점점

while IFS='|' read -r NUM CHAR 
do 
     export MAP[$NUM]=$CHAR 
done < testFile 

for i in ${!MAP[@]} 
do 
     echo "$i ${MAP[$i]}" 
done 

을하지만 모든 컴퓨터에 SSH를 갈거야 때 루프를 실행 ./test.sh[11]: syntax error at line 20: '!' unexpected

아래가 작동하지 않습니다.

ssh [email protected] << EOF 

for i in ${!MAP[@]} 
do 
     echo "$i ${MAP[$i]}" 
done 

EOF 

ssh machine

참고 testFile은 고정 된 파일이 아니며, 매 실행 시마다 달라지는 sql 쿼리에서이 파일을 생성합니다.

+0

는'someUser'의 로그인 쉘 KSH인가 : 변수

테스트를 탈출? – muru

+0

@muru : 예, 해당 ksh 쉘'/ usr/bin/ksh' – avinashse

+0

$ 기호는 여기의 문자열로 해석됩니다. 이스케이프 처리하십시오. – Archemar

답변

0

시도해 볼 수 있습니다.

#!/bin/ksh 
while IFS='|' read -r NUM CHAR 
do 
     export MAP[$NUM]=$CHAR 
done < testFile 

for i in "${!MAP[@]}" 
do 
     echo "$i "${MAP[$i]}"" 
done 

ssh [email protected] <<EOF 
eval `typeset -p MAP` 

for i in "\${!MAP[@]}" 
do 
     echo "\$i "\${MAP[\$i]}"" 
done 

EOF 

평가 : 평가 서버 측

조판 : 변수의 특성을 수정하도록 허용.

\의 $ :

$ ksh test.ksh 
1 A 
2 B 
3 C 
4 D 
5 E 
[email protected]'s password: 
1 A 
2 B 
3 C 
4 D 
5 E 
+0

답장을 보내 주셔서 감사합니다. -ksh : 줄 1에서 구문 오류가 발생했습니다. (제안한대로 변경 한 후에 '예기치 않은 오류가 발생했습니다.' – avinashse

+0

줄 : 1 : #!/bin/ksh로 # !/usr/bin/ksh 또는이 행을 지우십시오 –

+0

#!/usr/bin/ksh.을 사용하지 않았지만 사용 후 동일한 오류가 발생했습니다. – avinashse