web-dev-qa-db-fra.com

Comment supprimer l'élément du tableau gsettings dans le script?

Le tableau dans dbus/gsettings a un format [element1, element2, element3, ...].

L'interface Gsettings 'permet uniquement de remplacer un tableau existant par un autre, ainsi, par exemple, l'ajout d'un autre élément item peut être réalisé comme suit:

#!/bin/bash
gsettings get ${schema} ${key} | grep -q \"${value}\" >/dev/null
if [ $? -ne 0 ]; then
   gsettings set ${schema} ${key} \"`gsettings get ${schema} ${key} | sed s/.$//`, ${value}]\"
fi

Quelqu'un peut-il m'aider avec un script qui vérifie s'il existe au moins un élément qui correspond à l'expression régulière, et si c'est le cas, il analyse le gsettingsarray string, and removes all matching elements (and puts it back withgsettings set`, mais c'est trivial).

J'ai essayé de trouver un tel outil, mais je n'ai pas réussi à en trouver un. Je ne peux pas croire que personne n'avait encore besoin d'un tel outil ...


La question complète Comment ajouter un élément au tableau gsettings à l'emplacement spécifique (donné par l'index)?

2
Adam Ryczkowski

L'utilisation de bash pour cette tâche devrait être possible mais je préfère faire des manipulations de tableaux complexes avec un script Python3:

#!/usr/bin/env python3

import argparse
import subprocess
import sys

parser = argparse.ArgumentParser()
parser.add_argument("schema", help="gsettings shema", metavar="SCHEMA")
parser.add_argument("key", help="gsettings key", metavar="KEY")
parser.add_argument("values",
                    help="gsettings value(s) to remove from the KEY array",
                    metavar="VALUE", nargs='*')
args = parser.parse_args()

array = eval(subprocess.check_output(["gsettings", "get", args.schema, args.key]))
for v in args.values:
    try:
        value = eval(v)
    except:
        value = v
    try:
        array.remove(value)
    except ValueError:
        print("Warning: {} not in {} {}".format(value, args.schema, args.key), file=sys.stderr)
subprocess.call(["gsettings", "set", args.schema, args.key, str(array)])

Ce script permet de supprimer simultanément plusieurs valeurs du schéma/clé transmis au script.

3
Sylvain Pineau