如果字符串在多行标准输入中,则设置错误代码 1 的一行命令,否则设置为 0

One line command that sets error code 1 if string in multi-line stdin, 0 if not

当我运行命令

nmcli --get-values TYPE connection show --active

我有时会收到如下值列表

vpn
802-3-ethernet
tun
tun

但其他时候 vpn 行不存在。 (行的顺序不能假定)

我正在寻找一种可以接受 nmcli 命令输出的单行代码(大概是通过 pipe/stdin?)和 return 退出代码 1 当 vpn 在该列表中,当 vpn 不在该列表中时退出代码为 0。

我试过的

用例

我正在编写一个系统服务来更新我的动态 DNS。但是我不想在使用 VPN 时设置动态 DNS。我想使用 systemd 内置功能(尽可能)来控制它。所以我想使用 systemd 内置的 ExecStartPre=(退出代码 1+ 上的单元失败)来控制服务是否启动。

如果您有办法 运行 使用 systemd 的服务(或不使用)取决于是否连接了 VPN,我会接受它来代替上述方法。但是像“tun0 active=VPN”这样天真的假设对我来说是错误的。由于各种原因,我在任何时候都有各种 tun 连接处于活动状态。因此在 sys-subsystem-net-devices-tun0.device 上触发不起作用。

什么不起作用

我发现的大多数 Google 和 SO 结果都是针对特定行的否定,并没有解决我的用例,其中会有多行。或者他们 return 值并且不设置错误代码。我需要设置错误代码。

不是仅仅检查输出中是否存在 vpn,而是计算出现的次数,然后评估检查行数的条件表达式:

nmcli --get-values TYPE connection show --active | [ $(grep -c ^vpn) -eq 0 ]