Tento me conectar a uma rede WiFi específica em um bash
script em um Mac.
Duas coisas que quero alcançar:
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.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 depasskey
para 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 podeping
um 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 umread
declaraçã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