![](/img/trans.png)
[英]Execute bash command stored in associative array over SSH, store result
[英]SSH command option with bash for loop
我想象征性地鏈接兩個數組的元素。 例如, array1 = (AAA BBB CCC DDD)
, array2 = (001 002 003 004)
, array2 = (001 002 003 004)
001->AAA
, 004->DDD
002->BBB
, 003->CCC
和004->DDD
。
這是我寫的shell腳本,但它不起作用,我無法弄清楚哪里出錯了。
declare -a array1=(AAA BBB CCC DDD)
declare -a array2=(001 002 003 004)
num = ${#array1[@]}
ssh username@hostmachine 'for((i = 0 ; i < $num ; i++ )); do ln -sf ${array1[$i]} ${array2[$i]}; done'
誰能給我一些提示/建議? 先感謝您。
您應該將參數中的所有bash代碼包含在ssh
,如下所示:
ssh username@hostmachine 'declare -a array1=(AAA BBB CCC DDD); declare -a array2=(001 002 003 004); num = ${#array1[@]}; for((i = 0 ; i < $num ; i++ )); do ln -sf ${array1[$i]} ${array2[$i]}; done'
因為否則ssh bash代碼將無法訪問您之前定義的數組,因為它們是在您的計算機中定義的,而不是在ssh中定義的。
初看起來,我會說你錯過了循環中的最后done
:
ssh username@hostmachine 'for((i = 0 ; i < $num ; i++ )); do ln -sf ${array1[$i]} ${array2[$i]}; done'
變量替換不是在單引號內發生的。 請嘗試雙引號:
declare -a array1=(AAA BBB CCC DDD)
declare -a array2=(001 002 003 004)
num=${#array1[@]}
ssh username@hostmachine "for((i = 0 ; i < $num ; i++ )); do ln -sf ${array1[$i]} ${array2[$i]}; done"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.