Como faço para percorrer uma lista do dconf no bash?

4

Eu quero ler a lista de perfis do Gnome Terminal do dconf

$ 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']

e, em seguida, percorre a lista restante. Existe uma maneira sensata de fazer isso sem mexer com tr ? Atualmente eu tenho:

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

mas isso parece um pouco grosseiro. Acontece neste caso que eu sei que o conjunto de [],' não estará nos valores, mas isso não é universalmente verdadeiro. (Essa lista é UUIDs - hex minúsculas separadas por traços - mas nem todas as listas serão.) Existe uma maneira melhor de interpretar a sintaxe da lista de colchetes dados aqui em vez de trabalhar em volta disso?

    
por mattdm 14.05.2015 / 20:43

1 resposta

1

Como apontado nos comentários, você pode usar jq , que parece não gostar de ' , mas gosta de " , então

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

funciona como esperado

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

E o seguinte também funcionará

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

Tags