Mude para uma rede WiFi especificada via bash em um Mac

2

Eu tento conectar-me a uma rede WiFi específica em um script bash em um Mac.

Duas coisas que quero alcançar:

  1. Conecte-se à rede especificada. Eu tentei networksetup -setairportnetwork en0 [network_ID] , e eu 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 conjunto de chaves, pois não preciso digitá-la quando eu participo dessa rede manualmente.

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

Alguma sugestão?

    
por MLister 04.11.2015 / 03:32

1 resposta

1

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!

    
por 29.09.2018 / 06:08