bash
我嘗試在Mac 上的腳本中連接到特定的 WiFi 網路。
我想要實現的兩件事:
連接到指定的網路。我已經嘗試過了
networksetup -setairportnetwork en0 [network_ID]
,我可以從頂部選單欄中看到Mac正在嘗試連接到網絡,但最終失敗了。我應該注意,網路受密碼保護,並且密碼儲存在鑰匙圈中,因為當我手動加入該網路時不需要輸入密碼。暫停腳本其餘部分的執行,直到成功建立連線。
有什麼建議嗎?
答案1
1) 連接無線網路
您想要新增密碼。雖然passkey
由於我的 WiFi 網路 BSSID 在我的鑰匙圈中,我只能切換到它並透過將金鑰以明文形式直接新增到命令列來成功登入。其他的都沒起作用。
網路設定 -setairportnetwork [en0] [network_BBSSID][密碼]
2) 暫停腳本直到連接
您可以簡單地測試上面命令的錯誤代碼(echo $?
)。請小心,因為網路設定錯誤代碼並不簡單,grep「失敗」可能會有所幫助:
networksetup -setairportnetwork en0 mywifi mypass | grep -ic "failed"
如果結果是0你應該很好。您還可以直接測試實際連接,而不是簡單地連接到 wifi(恕我直言,更好的選擇),例如您可以檢查是否可以ping
您的網路或網際網路上的主機。你應該把所有這些放在一個while :
循環,它將重試該命令,直到結果為 0。read
對您的命令的聲明將暫停腳本(我對您問題的理解)。
最後你可能會想增加一個暫停如果一段時間後沒有網路加入,則終止網路設定:逾時命令,一部分gnu coreutils可能會派上用場。它可以透過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
:暫停直到按下按鍵