#!/bin/sh # Включает/выключает системный «автоматический прокси» (PAC) в macOS через networksetup. # По умолчанию: PAC http://localhost:1089/proxy.pac на сервисах Wi-Fi и Thunderbolt Bridge 2. # # Переменные окружения: # MACOS_PAC_URL — URL proxy.pac (по умолчанию http://localhost:1089/proxy.pac) # MACOS_PAC_SERVICES — список имён сетевых сервисов через «|» (см. networksetup -listallnetworkservices) usage() { printf '%s\n' "Usage: $(basename "$0") on|off|status" >&2 exit 1 } [ "$#" -eq 1 ] || usage cmd=$1 PAC_URL="${MACOS_PAC_URL:-http://localhost:1089/proxy.pac}" SERVICES="${MACOS_PAC_SERVICES:-Wi-Fi|Thunderbolt Bridge 2}" svc_exists() { networksetup -listallnetworkservices 2>/dev/null | grep -Fqx "$1" } case "$cmd" in on) OLDIFS=$IFS IFS='|' for svc in $SERVICES; do IFS=$OLDIFS [ -z "$svc" ] && continue if ! svc_exists "$svc"; then echo "skip (нет сервиса): $svc" >&2 continue fi networksetup -setautoproxyurl "$svc" "$PAC_URL" networksetup -setautoproxystate "$svc" on echo "PAC on: $svc" done ;; off) OLDIFS=$IFS IFS='|' for svc in $SERVICES; do IFS=$OLDIFS [ -z "$svc" ] && continue if ! svc_exists "$svc"; then echo "skip (нет сервиса): $svc" >&2 continue fi networksetup -setautoproxystate "$svc" off echo "PAC off: $svc" done ;; status) printf '%s\n' "PAC_URL=$PAC_URL" printf '%s\n' "SERVICES=$SERVICES" printf '%s\n' "---" OLDIFS=$IFS IFS='|' for svc in $SERVICES; do IFS=$OLDIFS [ -z "$svc" ] && continue if svc_exists "$svc"; then echo "[$svc]" networksetup -getautoproxyurl "$svc" else echo "[$svc] (нет такого сервиса)" fi done printf '%s\n' "--- scutil --proxy ---" scutil --proxy 2>/dev/null || true ;; *) usage ;; esac