It can happen that udev has an event for an interface in the queue that has already gone away - or even just being renamed.
Then reading the MAC address fails. Because the shell expands the "$(<...)" statement before running the whole line, the read check is useless.
Because the code would get too complicated otherwise, I decided to use cat. Not cool, but this does the job.
Signed-off-by: Michael Tremer michael.tremer@ipfire.org --- config/udev/network-hotplug-bridges | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/config/udev/network-hotplug-bridges b/config/udev/network-hotplug-bridges index 9fded1fd0..39faeb5a9 100644 --- a/config/udev/network-hotplug-bridges +++ b/config/udev/network-hotplug-bridges @@ -42,7 +42,7 @@ detect_zone() { local slave for slave in $(get_value "${zone}_SLAVES"); do # Compare if the mac address matches or if the name matches - if [ -r "/sys/class/net/${INTERFACE}/address" -a "$(</sys/class/net/${INTERFACE}/address)" = "${slave}" ] || [ "${INTERFACE}" = "${slave}" ]; then + if [ "$(cat /sys/class/net/${INTERFACE}/address 2>/dev/null)" = "${slave}" ] || [ "${INTERFACE}" = "${slave}" ]; then echo "${zone}" return 0 fi