1) Conectando rede sem fio
Você quer adicionar sua senha. Embora o passkey
para minha rede WiFi BSSID estivesse no meu conjunto de chaves, eu poderia apenas alternar para ele e fazer login com êxito adicionando a senha diretamente à linha de comando em texto não criptografado. Nada mais funcionou.
networksetup -setairportnetwork [en0] [network_BBSSID] [passkey]
2) Pausando o script até conectado
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, e grepping para "failed" pode ajudar:
networksetup -setairportnetwork en0 mywifi mypass | grep -ic "failed"
se o resultado for 0 , você deve ser bom. Você também pode testar diretamente a conectividade real em vez de simplesmente conectar-se ao Wi-Fi (melhor opção imho), por exemplo, você pode verificar se é possível ping
hospedar na sua rede ou na Internet.
Você deve colocar tudo isso em um loop while :
que repetirá o comando até que o resultado seja 0. Ou você pode adicionar uma instrução read
ao seu comando que pausar o script (minha compreensão da sua pergunta).
Por último, você pode adicionar um tempo limite para interromper o networksetup caso nenhuma rede seja conectada após um tempo: o comando timeout, parte do gnu coreutils pode ser útil . Pode ser instalado através do gerenciador de pacotes de preparação: brew install coreutils
.
3) Uma sugestão de liner
! 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 adiciona o prefixo g por padrão aos seus comandos para evitar misturar-se com os utilitários padrão existentes com o mesmo nome
/dev/null, 2>&-
: evita imprimir as saídas e códigos de erro dos vários comandos
read -n 1
: pausa até pressionar a tecla
Espero que isso ajude!