Mac에서 bash를 통해 지정된 WiFi 네트워크로 전환

Mac에서 bash를 통해 지정된 WiFi 네트워크로 전환

bashMac의 스크립트 에서 특정 WiFi 네트워크에 연결하려고 합니다 .

내가 달성하고 싶은 두 가지:

  1. 지정된 네트워크에 연결합니다. 을 시도했는데 networksetup -setairportnetwork en0 [network_ID]상단 메뉴 표시줄에서 Mac이 네트워크에 연결을 시도했지만 결국 실패했음을 알 수 있었습니다. 네트워크는 비밀번호로 보호되어 있으며 이 네트워크에 수동으로 연결할 때 비밀번호를 입력할 필요가 없으므로 비밀번호는 키체인에 저장됩니다.

  2. 연결이 성공적으로 설정될 때까지 나머지 스크립트의 실행을 일시 중지합니다.

어떠한 제안?

답변1

1) 무선 네트워크 연결
비밀번호를 추가하고 싶습니다. 비록passkey내 WiFi 네트워크 BSSID가 내 키체인에 있었기 때문에 암호키를 명령줄에 일반 텍스트로 직접 추가해야만 BSSID로 전환하고 성공적으로 로그인할 수 있었습니다. 다른 것은 효과가 없었습니다.

networksetup -setairportnetwork [en0] [network_BBSSID][곁쇠]

2) 연결될 때까지 스크립트 일시 중지
위 명령( echo $?)의 오류 코드를 간단히 테스트할 수 있습니다. 네트워크 설정 오류 코드는 사소한 것이 아니므로 주의하세요. "실패"를 검색하면 도움이 될 수 있습니다.
networksetup -setairportnetwork en0 mywifi mypass | grep -ic "failed"

결과가 그렇다면0당신은 잘해야합니다. 단순히 Wi-Fi에 연결하는 대신 실제 연결을 직접 테스트할 수도 있습니다(더 나은 옵션 imho). 예를 들어 다음을 확인할 수 있습니다.ping네트워크나 인터넷의 호스트. 이 모든 것을 한 곳에 넣어야합니다while :결과가 0이 될 때까지 명령을 재시도하는 루프입니다. 또는read스크립트를 일시 중지하는 명령에 대한 설명입니다(귀하의 질문에 대한 나의 이해).

마지막으로시간 초과잠시 후 네트워크가 연결되지 않는 경우 networksetup을 종료하려면: timeout 명령, 일부GNU 코어 유틸리티도움이 될 수 있습니다. Brew 패키지 관리자를 통해 설치할 수 있습니다.brew install coreutils.

3) 한 줄의 제안
! 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는 다음을 추가합니다g동일한 이름의 기존 기본 유틸리티와 혼동되지 않도록 기본적으로 명령 앞에 접두사를 붙입니다.
/dev/null, 2>&-: 다양한 명령의 출력 및 오류 코드를 인쇄하지 않습니다.
read -n 1: 키를 누를 때까지 일시 정지

관련 정보