将变量(数组索引)从远程 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
??
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
??