bash
Mac의 스크립트에서 특정 WiFi 네트워크에 연결하려고 합니다.
내가 달성하고 싶은 두 가지:
지정된 네트워크에 연결합니다. 이것을 시도했는데
networksetup -setairportnetwork en0 [network_ID]
상단 메뉴 표시줄에서 Mac이 네트워크에 연결을 시도했지만 결국 실패했음을 알 수 있습니다. 네트워크에 수동으로 연결할 때 비밀번호를 입력할 필요가 없으므로 네트워크는 비밀번호로 보호되어 있으며 비밀번호는 키체인에 저장되어 있습니다.연결이 성공적으로 설정될 때까지 나머지 스크립트의 실행을 일시 중지합니다.
어떤 제안이 있으십니까?
답변1
1) 무선 네트워크에 연결
비밀번호를 추가하고 싶습니다. 하지만passkey
내 WiFi 네트워크 BSSID가 내 키체인에 있으므로 명령줄에 키를 일반 텍스트로 직접 추가해야만 BSSID로 전환하고 성공적으로 로그인할 수 있습니다. 다른 것은 효과가 없었습니다.
네트워크 설정 -setairportnetwork [en0] [network_BBSSID][비밀번호]
2) 연결될 때까지 스크립트를 일시 중지합니다.echo $?
위 명령의 오류 코드( )를 간단히 테스트할 수 있습니다 . 네트워크 설정 오류 코드는 사소한 것이 아니므로 주의하십시오. grep "failed"가 도움이 될 수 있습니다.
networksetup -setairportnetwork en0 mywifi mypass | grep -ic "failed"
결과가 그렇다면0당신은 괜찮을 것입니다. 단순히 Wi-Fi에 연결하는 대신 실제 연결을 직접 테스트할 수도 있습니다(더 나은 옵션 imho). 예를 들어 작동하는지 확인할 수 있습니다.ping
네트워크나 인터넷에서 호스팅하세요. 이걸 하나로 모아야지while :
루프를 실행하면 결과가 0이 될 때까지 명령을 다시 시도합니다. 아니면read
귀하의 명령문은 스크립트를 일시 중지합니다 (귀하의 질문에 대한 나의 이해).
마지막으로정지시키다일정 시간이 지난 후에도 네트워크가 연결되지 않으면 네트워크 설정 종료: Timeout 명령, 일부GNU 코어 유틸리티유용할 수도 있습니다. Brew 패키지 관리자를 통해 설치할 수 있습니다.brew install coreutils
.
3) 1개의 라이너 제안
! 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
: 키를 누를 때까지 일시 정지