首页 > 解决方案 > 仅将第一个元素执行到数组中的问题

问题描述

我认为我的问题是微不足道的,但我不知道为什么我的脚本只在数组中执行一次。

我有一份詹金斯的工作(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”)。也许你可以指出我,我错过了什么。

标签: arraysbashjenkins

解决方案


可能这个ssh调用会吃掉你的输入:

sudo sshpass -p 'some.pass' ssh -o StrictHostKeyChecking=no user@$term_IP "sudo test -d /root/nv9"
                            ^^^

尝试添加-n.


推荐阅读