bash
Mac의 스크립트 에서 특정 WiFi 네트워크에 연결하려고 합니다 .
내가 달성하고 싶은 두 가지:
지정된 네트워크에 연결합니다. 을 시도했는데
networksetup -setairportnetwork en0 [network_ID]
상단 메뉴 표시줄에서 Mac이 네트워크에 연결을 시도했지만 결국 실패했음을 알 수 있었습니다. 네트워크는 비밀번호로 보호되어 있으며 이 네트워크에 수동으로 연결할 때 비밀번호를 입력할 필요가 없으므로 비밀번호는 키체인에 저장됩니다.연결이 성공적으로 설정될 때까지 나머지 스크립트의 실행을 일시 중지합니다.
어떠한 제안?
답변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
: 키를 누를 때까지 일시 정지