скрипт bash отрабатывает одну итерацию

Рейтинг: 1Ответов: 0Опубликовано: 29.06.2023

Скрипт проверяет доступность хостов из списка адресов в файле test_hosts, формирует список доступных, и по ним прогоняет сравнение папок на текущем и на удалённых хостах.

Два идентичных цикла while. В первом случае отрабатывает норм, список доступных хостов формирует. Второй цикл отрабатывает только одну итерацию по первому адресу. Добавил логирование - думал, что строка diff... выбрасывает из цикла, однако echo "ok ${con_ok}">>log отрабатывает.

Где косяк, понять не могу. Гуру, подскажите пожалуйста.

#!/bin/bash

#проверяем доступность узлов, создаём списки доступных и список недоступных узлов

touch connection_ok
touch connection_err

while read -r hosts
do
    echo "${hosts}"
    ping "${hosts}" -c 1 2>/dev/null && echo "${hosts}" >> connection_ok || echo "${hosts}" >> connection_err
    echo $?
done < test_hosts
echo "">>connection_ok
echo "UNREACHABLE HOSTS:"
echo ""
cat connection_err

#по списку доступных узлов в connection_ok проводим сравнение папок

touch res_compare
touch log

echo "---COMPARE DIRECTORIES---"
while read -r con_ok
do
    echo "${con_ok}"
    echo "${con_ok}">>log
    diff <(ssh user@"${con_ok}" ls -R /home/user/for_compare) <(ls -R /home/user/for_compare) 2>/dev/null && echo "${con_ok} passed" >> res_compare || echo "${con_ok} failed" >> res_compare
    echo "ok ${con_ok}">>log
done < connection_ok

#rm connection_ok
#rm log

echo "---RESULT---"
cat  res_compare

echo "END"

Ответы

Ответов пока нет.