Mude para uma rede WiFi específica via bash em um Mac

Mude para uma rede WiFi específica via bash em um Mac

Tento me conectar a uma rede WiFi específica em um bashscript em um Mac.

Duas coisas que quero alcançar:

  1. Conecte-se à rede especificada. Eu tentei networksetup -setairportnetwork en0 [network_ID]e pude ver na barra de menu superior que o Mac está tentando se conectar à rede, mas eventualmente falhou. Devo observar que a rede é protegida por senha e a senha é armazenada no chaveiro, pois não preciso digitá-la quando entro nesta rede manualmente.

  2. Pause a execução do restante do script até que a conexão seja estabelecida com sucesso.

Alguma sugestão?

Responder1

1) Conectando rede sem fio
Você deseja adicionar sua senha. Apesar depasskeypara minha rede WiFi, o BSSID estava em minhas chaves, só consegui mudar para ele e fazer login com sucesso adicionando a chave de acesso diretamente na linha de comando em texto não criptografado. Nada mais funcionou.

networksetup -setairportnetwork [en0] [network_BBSSID][senha]

2) Pausando o script até conectar
Você pode simplesmente testar o código de erro do comando acima ( echo $?). Tenha cuidado, pois os códigos de erro de configuração de rede não são triviais, usar o grep para "failed" pode ajudar:
networksetup -setairportnetwork en0 mywifi mypass | grep -ic "failed"

se o resultado for0você deveria ser bom. Você também pode testar diretamente a conectividade real, em vez de simplesmente conectar-se ao wifi (melhor opção, imho), por exemplo, você pode verificar se podepingum host na sua rede ou na internet. Você deveria colocar tudo isso em umwhile :loop que tentará novamente o comando até que o resultado seja 0. Ou você pode adicionar umreaddeclaração ao seu comando que irá pausar o script (meu entendimento da sua pergunta).

Por último, você pode querer adicionar umtempo esgotadopara encerrar o networksetup caso nenhuma rede seja ingressada depois de um tempo: comando timeout, parte dognu coreutilspode ser útil. Ele pode ser instalado através do gerenciador de pacotes brew:brew install coreutils.

3) Sugestão de um forro
! 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 adicione ogprefixo por padrão para seus comandos para evitar confusão com utilitários padrão existentes com o mesmo nome
/dev/null, 2>&-: evite imprimir as saídas e códigos de erro dos vários comandos
read -n 1: pausando até pressionar a tecla

informação relacionada