arrays - 仅将第一个元素执行到数组中的问题
问题描述
我认为我的问题是微不足道的,但我不知道为什么我的脚本只在数组中执行一次。
我有一份詹金斯的工作(bash 脚本)。此作业收集主机名并使用收集的信息通过脚本发送 ssh 命令:
rm /tmp/hosts
docker exec -t tmgnt_consul_1 consul members -status=alive | grep -v Node | awk '{print $1}' | cut -d : -f1 >> /tmp/hosts
sed -i '/someunnecessaryinfo/d' /tmp/hosts
echo >> /tmp/hosts
shopt -s lastpipe
while IFS= read -r line; do
echo "host is >>$line<<";
url="http://111.111.111.111:8500/v1/catalog/nodes"
term_IP=`curl -s $url | jq -r --arg Node "${line}" '.[] | select(.Node == "'${line}'" )|.Address' --raw-output`
echo $term_IP
sudo bash -x /home/rtm/t_mgnt/check_fw $term_IP
done < /tmp/hosts
第二个脚本:
#!/bin/bash
term_IP=$1
sudo sshpass -p 'some.pass' ssh -o StrictHostKeyChecking=no user@$term_IP "sudo test -d /root/nv9"
if [ $? != 0 ]; then
sudo sshpass -p 'some.pass' \
scp -n -o StrictHostKeyChecking=no -r /home/rtm/t_mgnt/nv9 user@$term_IP:
sudo sshpass -p 'some.pass' \
ssh -n -o StrictHostKeyChecking=no user@$term_IP "sudo mv nv9 /root/"
sudo sshpass -p 'some.pass' \
ssh -n -o StrictHostKeyChecking=no user@$term_IP "sudo dpkg -i /root/nv9/libudev0_175-0ubuntu9_amd64.deb"
sudo sshpass -p 'some.pass' \
ssh -n -o StrictHostKeyChecking=no user@$term_IP "sudo /root/nv9/DetectValidator"
else
sudo sshpass -p 'some.pass' \
ssh -n -o StrictHostKeyChecking=no user@$term_IP "sudo /root/nv9/DetectValidator"
fi
这项工作工作正常,并返回正确的值,但仅适用于数组的第一个元素。
PS - 我已经搜索过这个站点和其他站点,并且 - 以下答案对我没有帮助 - Shell script while read line loop 在第一行之后停止 (已经是“ssh -n -o”)。也许你可以指出我,我错过了什么。
解决方案
可能这个ssh
调用会吃掉你的输入:
sudo sshpass -p 'some.pass' ssh -o StrictHostKeyChecking=no user@$term_IP "sudo test -d /root/nv9"
^^^
尝试添加-n
.
推荐阅读
- gcc - GDB 的下一条命令向后跳转到作用域末尾的所有堆栈分配对象
- javascript - 如何覆盖高阶组件的默认道具?
- php - 照片上传到服务器和数据库的问题
- ruby-on-rails - Rails 中的时区设置
- list - 如何显示项目列表中的 index[0] 值?
- r - 使用 R 查找两个字符串的起始差异
- python - 如何在不使用循环的情况下找到(三个值)的最大值?[Python]
- google-bigquery - BIGQUERY SELECT 列表表达式引用在 [10:13] 处既不分组也不聚合的 CHANNEL_ID 列
- javascript - HTML表单提交上Javascript循环的安全性
- r - 我正在尝试使用 ggplot2 将正态曲线拟合到我的直方图上