скрипт bash отрабатывает одну итерацию
Скрипт проверяет доступность хостов из списка адресов в файле 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"
Источник: Stack Overflow на русском