簡體   English   中英

帶有bash for循環的SSH命令選項

[英]SSH command option with bash for loop

我想象征性地鏈接兩個數組的元素。 例如, array1 = (AAA BBB CCC DDD)array2 = (001 002 003 004)array2 = (001 002 003 004) 001->AAA004->DDD 002->BBB003->CCC004->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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM