我试图在Mac上的WiFi脚本中连接到特定的bash
网络。
我想实现两件事:
networksetup -setairportnetwork en0 [network_ID]
,我可以从顶部的菜单栏中看到Mac正在尝试连接到网络,但最终失败了。我应该注意到,网络是受密码保护的,并且密码存储在密钥链中,因为当我手动加入这个网络时,不需要键入它。有什么建议吗?
发布于 2018-09-29 04:08:57
1)连接无线网络
你想添加你的密码。尽管我的passkey
网络的WiFi网络BSSID在我的密钥链中,但我只能切换到它并成功地登录,方法是将密码直接添加到明文命令行中。其他什么都没有用。
网络设置-setairportnetwork en0 通键
2)暂停脚本直到连接
您可以简单地测试上面命令(echo $?
)的错误代码。小心,因为网络设置错误代码不是小事,为“失败”而欢呼可能会有帮助:
networksetup -setairportnetwork en0 mywifi mypass | grep -ic "failed"
如果结果是0,你应该是好的。您也可以直接测试实际连接性,而不是简单地连接到wifi (更好的选项imho),例如,您可以检查是否可以在网络或互联网上ping
主机。您应该将所有这些放入一个while :
循环中,该循环将重试该命令,直到结果为0。或者,您可以在命令中添加一个read
语句来暂停脚本(我对您的问题的理解)。
最后,您可能需要添加一个超时来终止网络设置,以防在一段时间后没有网络连接: 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
:暂停直到按下键
https://unix.stackexchange.com/questions/240625
复制相似问题