for a in ${MASTER_IP_LIST[@]} do echo "==="$a echo -e "${BL}#=====远程连接其他主节点$a" sshpass -p root ssh -Tq -o StrictHostKeyChecking=no root@$a << remotessh for b in ${MASTER_IP_LIST[@]} do echo "+++"$b done done 打印不出来变量b
时间: 2024-03-19 12:45:02 浏览: 74
您的代码中,for 循环语句的语法是正确的,但是在远程登录的 shell 中,shell 脚本和命令的执行环境和当前登录用户的环境是不同的。因此,需要将 $b 作为环境变量传递给远程登录的 shell,才能在远程登录的 shell 中使用。
可以通过在 for 循环外定义一个变量,将 $b 的值存储到这个变量中,然后在远程登录的 shell 中将这个变量作为环境变量进行传递,再在远程登录的 shell 中使用这个环境变量。
例如,修改您的代码如下:
```
#!/bin/bash
MASTER_IP_LIST=("192.168.1.100" "192.168.1.101" "192.168.1.102")
for a in ${MASTER_IP_LIST[@]}
do
echo "==="$a
echo -e "${BL}#=====远程连接其他主节点$a"
sshpass -p root ssh -Tq -o StrictHostKeyChecking=no root@$a << remotessh
for b in ${MASTER_IP_LIST[@]}
do
echo "+++"$b
export REMOTE_B=$b
# 在远程登录的 shell 中使用 REMOTE_B 环境变量
sshpass -p root ssh -Tq -o StrictHostKeyChecking=no root@$b "echo \${REMOTE_B}"
done
remotessh
done
```
在这个修改后的代码中,我们将远程登录的 shell 中需要使用的 $b 的值存储到 REMOTE_B 环境变量中,并在远程登录的 shell 中使用这个环境变量。
阅读全文