如果字符串在多行标准输入中,则设置错误代码 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。
我试过的
- 我能想到的
grep
的所有组合。 grep -v
绝对行不通,因为它总是会找到不是 vpn
的行。 grep
return 数据的其他选项,但不要更改错误代码(我可以找到)。
- 我能找到或想到的每一个否定正则表达式。
^(?!vpn).*$
形式的正则表达式不起作用,因为 总是 行不会说 vpn
.
用例
我正在编写一个系统服务来更新我的动态 DNS。但是我不想在使用 VPN 时设置动态 DNS。我想使用 systemd 内置功能(尽可能)来控制它。所以我想使用 systemd 内置的 ExecStartPre=
(退出代码 1+ 上的单元失败)来控制服务是否启动。
如果您有办法 运行 使用 systemd 的服务(或不使用)取决于是否连接了 VPN,我会接受它来代替上述方法。但是像“tun0
active=VPN”这样天真的假设对我来说是错误的。由于各种原因,我在任何时候都有各种 tun
连接处于活动状态。因此在 sys-subsystem-net-devices-tun0.device
上触发不起作用。
什么不起作用
我发现的大多数 Google 和 SO 结果都是针对特定行的否定,并没有解决我的用例,其中会有多行。或者他们 return 值并且不设置错误代码。我需要设置错误代码。
- 基于行:Regular expression to match a line that doesn't contain a word
- 基于行:How to negate specific word in regex?
不是仅仅检查输出中是否存在 vpn
,而是计算出现的次数,然后评估检查行数的条件表达式:
nmcli --get-values TYPE connection show --active | [ $(grep -c ^vpn) -eq 0 ]
当我运行命令
nmcli --get-values TYPE connection show --active
我有时会收到如下值列表
vpn
802-3-ethernet
tun
tun
但其他时候 vpn
行不存在。 (行的顺序不能假定)
我正在寻找一种可以接受 nmcli
命令输出的单行代码(大概是通过 pipe/stdin?)和 return 退出代码 1 当 vpn
在该列表中,当 vpn
不在该列表中时退出代码为 0。
我试过的
- 我能想到的
grep
的所有组合。grep -v
绝对行不通,因为它总是会找到不是vpn
的行。grep
return 数据的其他选项,但不要更改错误代码(我可以找到)。 - 我能找到或想到的每一个否定正则表达式。
^(?!vpn).*$
形式的正则表达式不起作用,因为 总是 行不会说vpn
.
用例
我正在编写一个系统服务来更新我的动态 DNS。但是我不想在使用 VPN 时设置动态 DNS。我想使用 systemd 内置功能(尽可能)来控制它。所以我想使用 systemd 内置的 ExecStartPre=
(退出代码 1+ 上的单元失败)来控制服务是否启动。
如果您有办法 运行 使用 systemd 的服务(或不使用)取决于是否连接了 VPN,我会接受它来代替上述方法。但是像“tun0
active=VPN”这样天真的假设对我来说是错误的。由于各种原因,我在任何时候都有各种 tun
连接处于活动状态。因此在 sys-subsystem-net-devices-tun0.device
上触发不起作用。
什么不起作用
我发现的大多数 Google 和 SO 结果都是针对特定行的否定,并没有解决我的用例,其中会有多行。或者他们 return 值并且不设置错误代码。我需要设置错误代码。
- 基于行:Regular expression to match a line that doesn't contain a word
- 基于行:How to negate specific word in regex?
不是仅仅检查输出中是否存在 vpn
,而是计算出现的次数,然后评估检查行数的条件表达式:
nmcli --get-values TYPE connection show --active | [ $(grep -c ^vpn) -eq 0 ]