基于 SSID 更改 MacOS 位置 - 更改前检查当前位置

Changing MacOS Location based on SSID - check current location before changing

I received some assistance with getting this script 中正常工作。该脚本基本上根据我连接的 SSID 设置我的网络位置。现在可以使用了,但是,它会生成很多令人讨厌的通知。

每次我的笔记本电脑加入 wifi 网络时,脚本都会运行,设置网络位置,并给我一个通知。由于 power nap 会定期加入 wifi 以检查 emails/updates 以及你有什么,在一个漫长的周末之后我会收到许多相同的通知。

如何修改脚本,使其仅在网络位置更改为其他内容时才发送通知,而不仅仅是在脚本运行时发送通知?如果 "new" 位置与 "existing" 位置不同,我能否以某种方式检查现有网络位置并仅更改 it/trigger 通知?

同样,一般来说,我对 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

This thread 说明如何获取当前网络位置。

我在进行任何更改之前添加了以下代码以获取当前网络位置:

CurrLoc=$(scselect | awk '{if (=="*") print }' | sed 's/[()]//g')

然后是一个简单的 if 语句,如果评估的 "new" 网络位置与现有位置匹配,则提前退出脚本:

if [ "$CurrLoc" = "$LOCATION" ]
then
    exit 0
fi

# existing code to change network location and show notifications