Начиная с bash5+ существует простое решение:
$ printf "%.3f\n" $EPOCHREALTIME
1566917328.786
Если точка не нужна:
printf "%s\n" "$((${EPOCHREALTIME/.}/1000))"
Укажите время в миллисекундах с начала эпохи все -в -одна -строка -из -текст, атомарный (один вызов внутренней переменной bash ), облегченный и нет проблемы с квантованием или округлением.
Могут быть более элегантные способы сделать это, но вы можете написать скрипт для NetworkManager-dispatcher
, который срабатывает при изменении соединения.
Диспетчер предоставит интерфейс и событие в качестве входных данных, а также установит некоторые удобные переменные среды для использования вами.
Минимальный «рабочий» пример будет примерно таким:
/etc/NetworkManager/dispatcher.d/<script_name>
#!/bin/sh
interface="$1"
action="$2"
interfacename=enp12s0
uuid="<uuid of the desired connection>"
if [ "$action" = "up" ] && [ "$interface" = "$interfacename" ] && [ "$CONNECTION_UUID" = "$uuid" ]; then
# Do your thing
fi
Очевидно, вы можете отменить любые изменения аналогичным образом при отключении соединения/профиля.
Убедитесь, что права доступа правильные (не мировые -права на запись и т. д. )и что он принадлежит пользователю root.
Я не проверял, какие события запускаются при изменении проводного профиля, но, по крайней мере, при изменении беспроводной сети будет запускаться connectivity-change
, за которым следует down
с CONNECTION_UUID
, установленным на старую сеть, за которым следует up
с CONNECTION_UUID
, установленным для новой сети.