Когда я запускаю команду
nmcli --get-values TYPE connection show --active
, я иногда получаю следующий список значений
vpn
802-3-ethernet
tun
tun
Но в других случаях строка vpn
отсутствует. (порядок строк нельзя предполагать)
Я ищу однострочник, который примет вывод этой nmcli
команды (предположительно через pipe / stdin?) и вернет код выхода 1, если vpn
находится в этом списке, и код выхода 0, если vpn
нет в этом списке.
Что я пробовал
- Каждая комбинация
grep
что я могу думать. grep -v
будет абсолютно не работать, потому что он всегда найдет строку, отличную от vpn
. Другие варианты grep
возвращают данные, но не меняют код ошибки (который я могу найти). - Каждое отрицательное регулярное выражение, которое я могу найти или придумать. Регулярные выражения в форме
^(?!vpn).*$
не работают, потому что всегда будет строкой, в которой не указано vpn
.
Вариант использования
Я написание службы systemd для обновления моего Dynami c DNS. Но я не хочу устанавливать свой динамический c DNS, пока я использую VPN. Я хочу использовать встроенные возможности systemd (насколько это возможно) для управления им. Поэтому я хочу использовать встроенный в systemd ExecStartPre=
(который дает сбой модуля при коде выхода 1+) для управления запуском службы.
Если у вас есть способ запустить службу (или нет) с использованием systemd в зависимости от того, подключен ли VPN, я приму это вместо вышеизложенного. Но наивные предположения вроде «tun0
active = VPN» для меня неверны. У меня одновременно активны различные tun
подключений по разным причинам. Таким образом, запуск по sys-subsystem-net-devices-tun0.device
не работает.
Что не работает
Большинство результатов Google и SO, которые я нахожу, относятся к отрицанию c с указанием строки и не относятся к моему вариант использования, когда будет несколько строк. Или они возвращают значения и не устанавливают код ошибки. Мне нужен набор кодов ошибок.