Macでbash経由で指定されたWiFiネットワークに切り替える

Macでbash経由で指定されたWiFiネットワークに切り替える

bashMacのスクリプトで特定のWiFiネットワークに接続しようとしています。

私が達成したい2つのこと:

  1. 指定されたネットワークに接続します。これを試しましたが、networksetup -setairportnetwork en0 [network_ID]トップメニューバーからMacがネットワークに接続しようとしましたが、最終的に失敗したことがわかります。ネットワークに手動で接続するときにパスワードを入力する必要がないため、ネットワークはパスワードで保護されており、パスワードはキーチェーンに保存されています。

  2. 接続が正常に確立されるまで、残りのスクリプトの実行を一時停止します。

どんな提案がありますか?

ベストアンサー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 :ループを実行すると、結果がゼロになるまでコマンドを再試行します。またはreadあなたのステートメントはスクリプトを一時停止します(あなたの質問に対する私の理解)。

最後に停止する一定時間が経過してもネットワークが接続されない場合は、ネットワーク設定を終了します。Timeoutコマンド、一部GNUコアユーティリティ役に立つかもしれません。 Brew Package Managerを介してインストールできます。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: キーを押すまで一時停止

おすすめ記事