如何在 bash 中循环浏览 dconf 中的列表?

如何在 bash 中循环浏览 dconf 中的列表?

我想从 dconf 读取 Gnome 终端配置文件列表

$ dconf read /org/gnome/terminal/legacy/profiles:/list
['b1dcc9dd-5262-4d8d-a863-c897e6d979b9', '1a3bb41a-5de6-4a23-af30-e70b4b8e5230', 'afa18dee-db51-42b6-b15d-cc35a5738932', '69a27e59-4bc4-4a9c-ba5c-1201ebdb9841']

然后循环遍历剩余的列表。有没有一种明智的方法可以做到这一点而不用咀嚼tr?目前我有:

for PROFILE in $( dconf read /org/gnome/terminal/legacy/profiles:/list|tr -d "[],'");
do
    dconf write /org/gnome/terminal/legacy/profiles:/:${PROFILE}/word-char-exceptions '@ms "-,.;/:?%&#_=+@~·"'
done

但这似乎有点恶心。在这种情况下,我知道该集合[],'不会出现在值中,但这并不普遍正确。 (这个列表恰好是 UUID——用破折号分隔的小写十六进制——但并非所有列表都是。)有没有更好的方法来实际解释此处给出的方括号列表语法而不是解决它?

答案1

正如您可以使用的评论中指出的那样jq,这似乎不喜欢',但喜欢",所以

dconf read /org/gnome/terminal/legacy/profiles:/list | tr "'" '"' | jq

按预期工作

[
  "b1dcc9dd-5262-4d8d-a863-f897e3d979b9",
  "7b765e06-1bcc-4695-86d6-c2d391651ac2"
]

以下也将起作用

dconf read /org/gnome/terminal/legacy/profiles:/list | \
  tr "'" '"' | \
  jq '.[]' | \
  while read PROFILE; do
      echo "here's the logic for $PROFILE"
  done

相关内容