将变量(数组索引)从远程 ssh 传递到全局函数

Passing variables (array index) from remote ssh to global function

BASH
我正在编写一个脚本来检查选定主机上选定用户的服务。选定的用户存储在一个数组中。该脚本通过 ssh 连接到每个选定的主机,并将循环遍历登录到每个选定用户的数组。但是,脚本无法在 ssh 期间读取 for 循环给出的数组索引 - 它只需要数组的第一个 (0) 索引。我已经尝试了几乎所有可能的引用、转义等...当我在回显或“检查”步骤中转义 $j 变量时,我收到 syntax error: operand expected (error token is “$j”) 错误。关于如何使其工作的任何想法?有可能吗?

usr1=("user1" "user2")

function tusr {
     declare -n tmpp="";
     echo "${tmpp[$j]}"
 }

 function testchk {
 echo "Logging in as $myuser to "
 ssh -tq $myuser@.bar.com "
 for j in ${!usr1[@]}; do
         echo $j
         echo ${usr1[$j]}
         echo "Checking $(tusr usr1 "$j"):"
 done
 "
 }

 srv="foo"
 testchk "$srv"

回显转义的 $j 时,它会打印出正确的值。

我的输出:

0
user1
Checking user1:
1
user1
Checking user1:

预期输出:

0
user1
Checking user1:
1
user2
Checking user2:

远程 shell 不知道您的本地变量或函数,因此您需要传递它们的声明。

ssh -tq $myuser@.bar.com "
    $(declare -p usr1)
    $(declare -f tusr)
    for j in ${!usr1[@]}
    do
        echo \"$j\"
        echo \"${usr1[$j]}\"
        echo \"Checking $(tusr usr1 $j):\"
    done
"

但是您尝试做的事情是真正的混合,而且令人困惑。您是否试图让远程用户在本地执行函数 tusr ??