Переключение на указанную сеть WiFi через bash на Mac

Переключение на указанную сеть WiFi через bash на Mac

Я пытаюсь подключиться к определенной сети WiFi в bashскрипте на Mac.

Я хочу добиться двух вещей:

  1. Подключитесь к указанной сети. Я пробовал networksetup -setairportnetwork en0 [network_ID], и я мог видеть в верхней строке меню, что Mac пытается подключиться к сети, но в конечном итоге это не удалось. Я должен отметить, что сеть защищена паролем, и пароль хранится в связке ключей, так как мне не нужно вводить его, когда я подключаюсь к этой сети вручную.

  2. Приостановите выполнение оставшейся части скрипта до тех пор, пока соединение не будет успешно установлено.

Любое предложение?

решение1

1) Подключение беспроводной сети
Вы хотите добавить свой пароль. Хотяpasskeyдля моей сети WiFi BSSID был в моей связке ключей, я мог переключиться на нее и успешно войти, только добавив ключ доступа непосредственно в командную строку в открытом тексте. Ничего больше не работало.

networksetup -setairportnetwork [en0] [network_BBSSID][ключ доступа]

2) Приостановка скрипта до подключения
Вы можете просто проверить код ошибки команды выше ( echo $?). Будьте осторожны, так как коды ошибок networksetup не являются тривиальными, grepping для "failed" может помочь:
networksetup -setairportnetwork en0 mywifi mypass | grep -ic "failed"

если результат0у вас должно быть все хорошо. Вы также можете проверить непосредственно фактическое подключение, а не просто подключаться к Wi-Fi (лучший вариант, имхо), например, вы можете проверить, что вы можетеpingхост в вашей сети или в интернете. Вы должны поместить все это вwhile :цикл, который будет повторять команду до тех пор, пока результат не станет 0. Или вы можете добавитьreadоператор вашей команды, который остановит скрипт (насколько я понимаю ваш вопрос).

Наконец, вы можете захотеть добавитьтайм-аутдля завершения работы networksetup в случае, если в течение некоторого времени не будет подключено ни одной сети: команда timeout, частьgnu coreutilsможет пригодиться. Его можно установить через менеджер пакетов 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 добавитьгпрефикс по умолчанию для своих команд, чтобы избежать путаницы с существующими утилитами по умолчанию с тем же именем
/dev/null, 2>&-: избегать печати выходных данных и кодов ошибок различных команд
read -n 1: пауза до нажатия клавиши

Связанный контент