我正在使用
echo $(/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -I | grep "SSID:" | grep -v "BSSID" | awk '{$1=""; print $0}'
获取zsh提示符的wifi名称。
它可以与标准名称配合使用,但是如果名称包含任何非标准字符,即“ B&Q_Public”,则仅返回B,然后显示
(eval):1: command not found: Q
任何建议
答案 0 :(得分:2)
首先,airport
实用程序的漫长道路非常笨拙。让我们做一个符号链接。
sudo ln -s /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport /usr/bin/airport
假设这样的程序输出(基于我以this为例的某种搜索):
agrCtlRSSI: -76 agrExtRSSI: 0 agrCtlNoise: -92 agrExtNoise: 0 state: running op mode: station lastTxRate: 24 maxRate: 54 lastAssocStatus: 0 802.11 auth: open link auth: wpa2-psk BSSID: c0:3e:f:2f:c3:ad SSID: B&Q_Public MCS: -1 channel: 4
并且仅获得B&Q_Public
(SSID)的预期结果,使用单个awk
命令就足够了:
airport -I | awk -F ": " '/ SSID:/{print $2}'
注意:
': '
,这些值将始终位于$2
中。SSID:
前面有空格,这会阻止该行与BSSID:
匹配。grep
不需要运行两次,awk
可以正常运行。这里没有eval
正在运行,因此我认为仅此行不会产生您所显示的错误。