use*_*925 2 linux variables bash for-loop expect
我正在尝试使用 FOR 循环遍历 IP 地址(在 bash 数组中)、登录、运行脚本然后退出。该数组称为 ${INSTANCE_IPS[@]}。但是,以下代码不起作用,因为expect似乎无法接受变量 $instance。
for instance in ${INSTANCE_IPS[@]}
do
echo $instance
/usr/bin/expect -c '
spawn ssh root@$instance;
expect "?assword: ";
send "<password>\r";
expect "# ";
send ". /usr/local/bin/bootstrap.sh\r";
expect "# ";
send "exit\r" '
done
Run Code Online (Sandbox Code Playgroud)
但是,expect抱怨:
can't read "instance": no such variable
while executing
"spawn ssh root@$instance"
Run Code Online (Sandbox Code Playgroud)
位于此处的stackoverflow 上还有另一个问题,它使用环境变量来实现这一点,但是它不允许我像在数组中那样遍历不同的 IP 地址。
任何帮助表示赞赏。
干杯
问题在于引用。整个块周围的单引号不会让 Bash 扩展变量 ( $instance)。
您需要切换到双引号。但是,双引号内的双引号是不允许的(除非您对它们进行转义),因此我们最好将单引号与expect字符串一起使用。
试试吧:
for instance in ${INSTANCE_IPS[@]}
do
echo $instance
/usr/bin/expect -c "
spawn ssh root@$instance;
expect '?assword: ';
send '<password>\r';
expect '# ';
send '. /usr/local/bin/bootstrap.sh\r';
expect '# ';
send 'exit\r' "
done
Run Code Online (Sandbox Code Playgroud)