Intento conectarme a una red WiFi específica en un bash
script en una Mac.
Dos cosas que quiero lograr:
Conéctese a la red especificada. Lo intenté
networksetup -setairportnetwork en0 [network_ID]
y pude ver en la barra de menú superior que la Mac está intentando conectarse a la red, pero finalmente falló. Debo tener en cuenta que la red está protegida con contraseña y la contraseña se almacena en el llavero, ya que no necesito escribirla cuando me uno a esta red manualmente.Pause la ejecución del resto del script hasta que la conexión se establezca correctamente.
¿Cualquier sugerencia?
Respuesta1
1) Conexión de red inalámbrica
Quieres agregar tu contraseña. Aunque elpasskey
Para mi red WiFi, el BSSID estaba en mi llavero, solo podía cambiar a él e iniciar sesión correctamente agregando la clave de acceso directamente a la línea de comando en texto sin cifrar. Nada más funcionó.
configuración de red -setairportnetwork [en0] [red_BBSSID][llave maestra]
2) Pausar el script hasta que se conecte
Simplemente puede probar el código de error del comando anterior ( echo $?
). Tenga cuidado, ya que los códigos de error de configuración de red no son triviales; buscar "fallido" puede ayudar:
networksetup -setairportnetwork en0 mywifi mypass | grep -ic "failed"
si el resultado es0deberías ser bueno. También puede probar directamente la conectividad real en lugar de simplemente conectarse al wifi (mejor opción en mi humilde opinión), por ejemplo, puede verificar que puedeping
un host en su red o en Internet. Deberías poner todo esto en unwhile :
bucle que reintentará el comando hasta que el resultado sea 0. O puede agregar unread
declaración a su comando que pausará el script (según tengo entendido su pregunta).
Por último, es posible que desee agregar unse acabó el tiempopara finalizar la configuración de red en caso de que no se conecte ninguna red después de un tiempo: comando de tiempo de espera, parte degnu coreutilspuede resultar útil. Se puede instalar a través del administrador de paquetes de preparación:brew install coreutils
.
3) Sugerencia de una sola línea
! gtimeout 10s networksetup -setairportnetwork en0 mywifi mypass >/dev/null && echo 1 || { ping -oq www.apple.com 2>&- >/dev/null && echo "Connected" || read -n1 -r -p "Connection failed. Press any key to continue..." ; } ;
gtimeout
: gnutls agregan elgramoprefijo de forma predeterminada a sus comandos para evitar confundirse con utilidades predeterminadas existentes del mismo nombre
/dev/null, 2>&-
: evite imprimir las salidas y los códigos de error de los distintos comandos
read -n 1
: pausa hasta que se presione la tecla