我想要一个 bash 脚本,可以使用 nmcli 删除所有 gsm 类型的网络管理器连接。
最好的方法是什么?
最佳答案
这实际上是一个比表面上看起来更棘手的问题,因为 NetworkManager 允许连接名称中包含空格。这使得以编程方式解析 nmcli connection show 的连接名称输出有点尴尬。我认为脚本编写的最佳选择是依赖 UUID,因为它似乎始终是由十六进制字符和破折号组成的 36 个字符组。这意味着我们可以用正则表达式一致地拉取它。例如,您可以获得 gsm 连接的 UUID 列表,其中包含以下内容:
$ nmcli connection show | grep gsm | grep -E -o '[0-9a-f\-]{36}'
cc823da6-d4e1-4757-a37a-aaaaaaaaa
etc
因此您可以获取 UUID,然后根据 UUID 进行删除:
GSM_UUIDS=$(nmcli connection show | grep gsm | grep -E -o '[0-9a-f\-]{36}')
while IFS= read -r UUID; do echo nmcli connection delete $UUID; done <<< "$GSM_UUIDS"
使用 echo 运行以确保获得预期的结果,然后可以将其删除,然后就可以正常工作了。我在本地运行了一些虚拟 GSM 连接,它似乎按照您希望的方式工作:
GSM_UUIDS=$(nmcli connection show | grep gsm | grep -E -o '[0-9a-f\-]{36}')
while IFS= read -r UUID; do nmcli connection delete $UUID; done <<< "$GSM_UUIDS"
Connection 'gsm' (cd311376-d7ab-4891-ba73-e4e8a3fc6614) successfully deleted.
Connection 'gsm-1' (54171181-5c37-4224-baf5-9eb36458f773) successfully deleted.
关于bash - 如何使用 nmcli 按类型删除连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67125804/