bash - 根据 SSID 更改 MacOS 位置 - 在更改之前检查当前位置
问题描述
在这个线程中,我得到了一些帮助,让这个脚本正常工作。该脚本本质上是根据我连接的 SSID 设置我的网络位置。这现在正在工作,但是,它会产生很多令人讨厌的通知。
每次我的笔记本电脑加入 wifi 网络时,脚本都会运行,设置网络位置,并给我一个通知。由于小睡会定期加入 wifi 以检查电子邮件/更新以及你有什么,在一个漫长的周末之后,我会收到几十个相同的通知。
如何修改脚本,使其仅在网络位置更改为不同时发送通知,而不仅仅是在脚本运行时发送通知?我可以以某种方式检查现有的网络位置,并且仅在“新”位置与“现有”位置不同时才更改它/触发通知?
再说一次,我对在 mac 和 GitHub 上编写脚本非常陌生。我以前的经验都是在 Windows 上的,主要是自学的。
脚本:
#!/bin/bash
# automatically change configuration of Mac OS X based on location
# redirect all IO to a logfile
mkdir -p /usr/local/var/log
exec &>/usr/local/var/log/locationchanger.log
# get a little breather before we get data for things to settle down
sleep 2
# get SSID
SSID=$(/System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport -I | sed -n 's/^ *SSID: //p')
echo $(date) "New SSID found: $SSID"
# LOCATIONS
LOCATION=
Location_Automatic="Automatic"
Location_Office="Office"
Location_Site="Site"
# SSIDS
SSID_Office="My Office SSID"
SSID_Site="My Mobile SSID"
# SSID -> LOCATION mapping
case $SSID in
"$SSID_Office") LOCATION="$Location_Office";;
"$SSID_Site" ) LOCATION="$Location_Site";;
esac
REASON="SSID changed to $SSID"
# Location_Automatic
if [ -z "$LOCATION" ]; then
LOCATION="$Location_Automatic"
REASON="Automatic Fallback"
fi
# change network location
scselect "$LOCATION"
case $LOCATION in
"$Location_Automatic" )
osascript -e 'display notification "Network Location Changed to Automatic" with title "Network Location Changed"'
;;
"$Location_Office" )
osascript -e 'display notification "Network Location Changed to Office" with title "Network Location Changed"'
;;
"$Location_Site" )
osascript -e 'display notification "Network Location Changed to Site" with title "Network Location Changed"'
;;
esac
echo "--> Location Changer: $LOCATION - $REASON"
exit 0
解决方案
该线程解释了如何获取当前网络位置。
在进行任何更改之前,我添加了以下代码以获取当前网络位置:
CurrLoc=$(scselect | awk '{if ($1=="*") print $3}' | sed 's/[()]//g')
如果评估的“新”网络位置与现有网络位置匹配,则使用一个简单的 if 语句提前退出脚本:
if [ "$CurrLoc" = "$LOCATION" ]
then
exit 0
fi
# existing code to change network location and show notifications
推荐阅读
- c# - c#如何处理两个argus哪个不确定类型?
- ruby-on-rails - Rails 5:在链接上添加额外的字符
- html - CSS - 如何在两个正方形中间放置一个矩形
- mysql - SQL BigQuery - 插入具有不同日期范围的行
- php - 用php按降序显示值
- symfony - 如何在 Symfony 5.0 中从 FormEventSubscriber 登录?
- gitlab - GitLab Runner Parallels Executor & Windows 10 VM - 卡住“正在创建新的 VM...”
- python - 将当前时间与特定时间范围进行比较
- linux - 列出以破折号 (-) 结尾的行
- shell - 如何在我的 Perl 中调用 shell 脚本函数?