2016-11-11 60 views
1

我有一個testFile,它有兩個由pipe分隔的參數。在ssh shell腳本中迭代本地地圖

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 

我如何使用MAP ssh機器

注意testFile不是固定的文件,我從sql查詢創建此文件,這是在每次運行變化。

+0

是'someUser'的登錄shell KSH? – muru

+0

@muru:是的,以S KSH的Shell'在/ 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 

EVAL:評估服務器端

排版:以允許修改的變量的屬性。

\ $:逃避一個變量

測試:

$ 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行:'(」完成按照你的建議更改後unexpected'錯誤 – avinashse

+0

線:1:#!/ bin中/ KSH可以ü改變# !在/ usr/bin中/ KSH,或者刪除我沒有使用#這行 –

+0

!在/ usr/bin中/ KSH,但使用它得到同樣的錯誤了。 – avinashse