Должны ли операнды утилиты всегда появляться после всех опций утилиты?

Согласно предложению @ garethTheRed в комментариях, я создал ловушку диспетчера сети.

Создайте следующий файл по адресу /etc/NetworkManager/dispatcher.d/99_foo.dynu.com.sh . Это происходит при обнаружении нового сетевого подключения (например, Ethernet или Wi-Fi). Затем он идентифицирует мою «домашнюю сеть» двумя способами: BSSID / SSID и статический IP-адрес, который мне назначает мой маршрутизатор. (На данный момент это не работает, когда я подключаюсь через Ethernet, поскольку это относительно редко.) Затем он добавляет отображение в файл hosts, если мы находимся в домашней сети; если нет, то он удаляет эту строку.

#!/bin/sh
# Map domain name to internal IP when connected to home network (via wifi)
# Partially inspired by http://sysadminsjourney.com/content/2008/12/18/use-networkmanager-launch-scripts-based-network-location/

WIFI_ID_TEST='Connected to 11:11:11:11:11:11 (on wlp3s0)
    SSID: WifiName'
LOCAL_IP_TEST='192.168.1.90'
MAPPING='192.168.1.100    foo.dynu.com'
HOSTS_PATH=/etc/hosts

IF=$1
STATUS=$2
# Either wifi or ethernet goes up
if [ "$STATUS" = 'up' ] && { [ "$IF" = 'wlp3s0' ] || [ "$IF" = 'enp10s0' ]; }; then
  # BSSID and my static IP, i.e. home network
  if [ "$(iw dev wlp3s0 link | head -n 2)" = "$WIFI_ID_TEST" ] && [ -n "$(ip addr show wlp3s0 to ${LOCAL_IP_TEST})" ]; then
    grep -qx "$MAPPING" "$HOSTS_PATH" || echo "$MAPPING" >> "$HOSTS_PATH"
  else
    ESC_MAPPING="^$(<<<"$MAPPING" sed 's/\./\\./g')$"
    sed -i "/${ESC_MAPPING}/d" "$HOSTS_PATH"
  fi
fi
1
10.02.2016, 05:59
0 ответов

Теги

Похожие вопросы