大家好,
我创建了一个小 bash shell 脚本,我想将它与 GeekTool 一起使用,但我在 iMac (11,1) 和 MacBook Pro (8,3) 上使用相同的脚本时遇到了不同的结果。我正在使用networksetup 和system_profiler 提取网络数据。到目前为止,我对两者都进行了多次调用,但希望将其合并为对每个进程的一次调用,以创建要在我的脚本中使用的变量。到目前为止,这是我的脚本:
# Get Ethernet and Wi-Fi information and display it for GeekTool
WiFi=$(networksetup -getairportnetwork en1 | awk '{print $4 " " $5 " " $6 " " $7 " " $8}')
WiFi_IP=$(networksetup -getinfo Wi-Fi | grep -v IPv6 | awk '/IP address/ {print $3}')
SubMask=$(networksetup -getinfo Wi-Fi | awk '/Subnet mask/ {print $3}')
S2N=$(system_profiler SPAirPortDataType | awk '/Noise/ {print $4 " " $5 " " $6 " " $7 " " $8}')
TRate=$(system_profiler SPAirPortDataType | awk '/Rate/ {print $3 " Mbps"}')
echo -e "\033[4;33m" AirPort
if [ "$WiFi_IP" = "" ];
then echo "Not connected to wireless AP."
else echo -e "Wi-Fi AP: " $WiFi "\nIP Address: " $WiFi_IP "\nSubnet Mask: " $SubMask "\nTransmit Rate: " $TRate
fi
EthIP=$(networksetup -getinfo Ethernet | grep -v IPv6 | awk '/IP address/ {print $3}')
EthSubMask=$(networksetup -getinfo Ethernet | grep -v IPv6 | awk '/Subnet mask/ {print $3}')
echo -e "\033[4;33m" "\nEthernet"
if [ "$EthIP" = "" ];
then echo "Not connected to wired network."
else echo -e "IP Address: " $EthIP "\nSubnet Mask: " $EthSubMask
fi
当我在 GeekTool 中创建一个 shell 并输入脚本的路径时,我的 MacBook Pro 上一切正常,但在我的 iMac 上,GeekTool 显示结果一次,然后在刷新时(我将其设置为 15 秒),结果消失并且永远不会返回屏幕。虽然我知道我所拥有的工作,但它对两个进程进行了太多调用,我想将其合并为每个进程一次调用,将所需的信息提取到一个容器中,例如一个我可以从中访问所需信息的数组。
换句话说,有谁知道我如何只调用 networksetup 来获取从 -getairportnetwork en1 和 -getinfo Wi-Fi 以及 system_profiler SPAirPortDataType 收集的所有信息(这需要最长 - 每个大约 5-8 秒时间)?