Estoy ejecutando un script que depende de que la red esté activa y se monte un recurso compartido de red. El script se ejecuta al iniciar sesión (lo que ocurre automáticamente después del arranque). El problema es que para cuando se ejecuta el script, por lo general todavía no tengo una dirección IP (DHCP). Por el momento, solo duermo el script durante 15 segundos, pero no me gusta este enfoque en absoluto, ya que quiero poder decirle al usuario si algo está mal.
Mi plan es un bucle mientras aún no tengo una dirección IP y continuar cuando lo tenga. Crucialmente, tiene que expirar después de un tiempo. Lo que se me ocurrió es hacerlo, if [ ifconfig | grep "192.168.100" ];
pero lo que sucede es que grepconsume el ];
y no le gusta. Entonces bash también se molesta, porque no puede encontrar ];
qué grep comió. Y luego ni siquiera he implementado el tiempo de espera.
Alguien sugirió mantener una variable y dormir, por ejemplo, un segundo en cada iteración y aumentar esta variable cada vez. Aquí está mi script completo (que no funciona) (soy bastante nuevo en bash scripting):
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...
¡Cualquier indicador en la dirección correcta sería muy apreciado!
grep
salida a /dev/null
. Use la -q
opción en su lugar. Y tampoco me molesta que ifconfig sea una buena idea. ¿Por qué no usar ping
en su lugar?
ping
puede fallar dependiendo de la red en cuestión. Es mejor simplemente verificar la configuración en ejecución del sistema.
network-online.target
...