【发布时间】:2019-02-27 03:35:19
【问题描述】:
这是我的脚本,其中我使用heredoc 在远程机器内使用局部变量。但是heredoc 下的循环只取第一个变量值。循环在 heredoc 内运行良好,但值相同。
#!/bin/bash
prod_web=($(cat /tmp/webip.txt));
new_prod_app_private_ip=($(cat /tmp/ip.txt));
no_n=($(cat /tmp/serial.txt));
ssh -t -o StrictHostKeyChecking=no ubuntu@${prod_web[0]} -p 2345 -v << EOF
set -xv
for (( x = 0; x < '${#no_n[@]}'; x++ ))
do
sudo su
echo '${no_n[x]}'
echo '${new_prod_app_private_ip[x]}'
curl -fIkSs https://'${new_prod_app_private_ip[x]}':9002 | head -n 1
done
EOF
所以,我的 ip.txt 文件包含如下值:
10.0.1.0
10.0.2.0
10.0.3.0
我的 serial.txt 文件:
9
10
11
所以,我的循环只针对远程机器中的第一个 IP(存在于 /tmp/ip.txt)运行了 3 次。我想为所有三个 IP 运行它。我的远程 ip 存在于文件 /tmp/webip.txt。
卡了很长时间,感谢任何帮助。我还有其他解决方案吗?
【问题讨论】:
-
这里的 doc 不运行任何命令,除了命令替换和变量扩展。就像
echo heredoc。您希望循环在本地机器还是远程执行? -
@KamilCuk 我希望在远程机器上执行循环。
-
要调试此问题,请将
ssh ...替换为cat并查看远程主机看到的内容。 -
@thatotherguy 我已经设置了-xv,还需要吗?
-
没有人需要任何东西,但是如果您查看您要求主机运行的脚本,就会立即明白它为什么会这样。
标签: bash loops variables eof heredoc