Вы можете реорганизовать скрипт в более ясную версию и удалить все </dev/null
:
while read -r fqdn; do {
{ clear; echo ""; echo ""; echo "$hostname"; echo ""; }
if ssh -p 34499 root@"${fqdn}" '[ -d /etc/nginx ]'; then
ssh -p 34499 root@"${fqdn}" 'mv /etc/nginx/nginx.conf /etc/nginx/.nginx-sept-30'
scp -P 34499 nginx.conf root@"${fqdn}":/etc/nginx
ssh -p 34499 root@"${fqdn}" 'sed -i "/honeypot/d" /etc/nginx/conf.d/*.conf'
ssh -p 34499 root@"${fqdn}" 'nginx -t'
else
exit 1;
fi
} </dev/null; done < "${hostfile}"
Почти невидимые для глаз, я поместил все команды внутри do ... done
внутри { .. } </dev/null
. Таким образом, любая команда не будет читать из ${hostfile}
и не будет связываться с while read
.
Другой вариант - использовать выделенный дескриптор файла и передать его номер для чтения:
while read -r -u 10 fqdn; do
{ clear; echo ""; echo ""; echo "$hostname"; echo ""; }
if ssh -p 34499 root@"${fqdn}" '[ -d /etc/nginx ]'; then
ssh -p 34499 root@"${fqdn}" 'mv /etc/nginx/nginx.conf /etc/nginx/.nginx-sept-30'
scp -P 34499 nginx.conf root@"${fqdn}":/etc/nginx
ssh -p 34499 root@"${fqdn}" 'sed -i "/honeypot/d" /etc/nginx/conf.d/*.conf'
ssh -p 34499 root@"${fqdn}" 'nginx -t'
else
exit 1;
fi
done 10<"${hostfile}"