Basicamente, o que você deseja é alterar o mapeamento de porta por run-parts
sempre que a interface em uso for alterada, evitando executar run-parts
se a interface em uso não tiver sido alterada desde a última vez em que run-parts
foi executado. / p>
Você precisará armazenar a última interface no status de uso em algum lugar e toda vez que o script for executado, compare a interface atual em uso contra isso de alguma forma; esse script faz isso (atualiza a interface atual em uso em /opt/mapper/prevdev
cada vez que uma alteração ocorre):
#!/bin/sh
eth0_status=$(cat /sys/class/net/eth0/operstate)
wlan0_status=$(cat /sys/class/net/wlan0/operstate)
touch /opt/portmapper/prevdev # Creates /opt/portmapper/prevdev if it doesn't exist
prevdev=$(cat /opt/portmapper/prevdev)
if [ "$eth0_status" = "up" ] && [ "$wlan0_status" = "down" ]; then # We're currently on Ethernet
currdev=eth0
fi
if [ "$eth0_status" = "down" ] && [ "$wlan0_status" = "up" ]; then # We're currently on WiFi
currdev=wlan0
fi
if [ "$currdev" != "$prevdev" ]; then # The interface in use has changed since the last time we checked
if [ "$currdev" = "eth0" ]; then # We're currently on Ethernet
run-parts /opt/portmapper/30
echo 'Current device and portmappings are on Ethernet'
echo 'eth0' >/opt/portmapper/prevdev # Updates /opt/mapper/prevdev
else # We're currently on WiFi
run-parts /opt/portmapper/31
echo 'Current device and portmappings are on WiFi'
echo 'wlan0' >/opt/portmapper/prevdev # Updates /opt/mapper/prevdev
fi
else
echo 'No changes need to be made to port mappings'
fi