Piszę na skrypcie restartującym różne serwery. Po ponownym uruchomieniu chcę „poczekać”, aż wszystkie serwery powrócą do trybu online. (Dla uproszczenia zdefiniowałem dla niego online = możliwość pingowania)
Tak więc dla każdego serwera
ServerXY_W=1
echo -n "waiting for ServerXY ..."
while (($ServerXY_W == 1))
do
if ping -c 1 -w 0.2 192.168.123.123 &> /dev/null
then
echo "ServerXY is back online!"
ServerXY_W=0
else
echo -n "."
fi
done
Czego bym się spodziewał (i lubił) to wynik taki jak np
waiting for ServerXY .................
ServerXY is back online!
gdzie kropki ... pojawiałyby się jedna po drugiej.
Ale to, co się faktycznie dzieje, jest pierwsze
waiting for ServerXY ...
przez jakiś czas i kiedy serwer powraca, dostaję ostatnią kropkę i ostatnią linię jak
waiting for ServerXY ....
ServerXY is back online!
Dlaczego pętla while jest wykonywana tylko dwa razy, tak jak raz z niepowodzeniem ping i raz z pingiem? Co muszę zmienić, aby dodać więcej kropek w pętli while?
Zrobiłem test również z nieistniejącym adresem IP. Ale utknęło
waiting for NonExistentServer...
i oczywiście nigdy nie wygasły. Ale to samo pytanie, dlaczego nie ........
zostanie dodane?