Sto eseguendo uno script che si basa sul fatto che la rete sia attiva e che venga montata una condivisione di rete. Lo script viene eseguito all'accesso (che si verifica automaticamente dopo l'avvio). Il problema è che quando lo script viene eseguito, di solito non ho ancora un indirizzo IP (DHCP). Al momento dormo solo lo script per 15 secondi, ma non mi piace affatto questo approccio, dal momento che voglio essere in grado di dire all'utente se qualcosa non va.
Qual è il mio piano, è un ciclo mentre non ho ancora un indirizzo IP e continuare quando lo faccio. Fondamentalmente, deve scadere dopo un po '. Quello che mi è venuto in mente è di farlo, if [ ifconfig | grep "192.168.100" ];
ma ciò che accade è che ];
non lo utilizza. Quindi anche bash si arrabbia, perché non riesce a trovare ];
quale grep ha mangiato. E poi non ho nemmeno implementato il timeout.
Qualcuno ha suggerito di mantenere una variabile e dormire per, diciamo, un secondo in ogni iterazione e aumentare questa variabile ogni volta. Ecco il mio script completo (non funzionante) (sono abbastanza nuovo per lo script bash):
x=0
while [ ifconfig | grep "192.168.100." > /dev/null ]; do
echo "no nework"
if "$x" -gt 200; then
#Time out here
exit 1
x=$((x+1))
sleep .1
fi
done
#continue with rest of script...
Eventuali puntatori nella giusta direzione sarebbero molto apprezzati!
grep
output a /dev/null
. Usa -q
invece l'opzione. E anche io non ho niente a che vedere con ifconfig è una buona idea. Perché non usare ping
invece?
ping
può fallire a seconda della rete in questione. È meglio controllare solo la configurazione in esecuzione del sistema.
network-online.target
...