Как удалить элемент из массива gsettings в сценарии?

Массив в dbus/gsettings имеет формат [element1, element2, element3, ...].

Gsettings'интерфейс позволяет только заменять существующий массив другим, так например, добавляя, что другой элемент объекта может быть достигнут следующим образом:

#!/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

Может любой помогать мне со сценарием, который проверяет, существует ли по крайней мере один элемент, который соответствует regex, и если он делает, он анализирует gsettingsarray string, and removes all matching elements (and puts it back withнабор gsettings', но это тривиально).

Я пытался найти такой инструмент, но мне не удалось найти тот. Я не могу полагать, что ни у кого все же не было потребности в таком инструменте...


Дополнения вопроса, Как добавить элемент к gsettings, выстраивают в определенном местоположении (данный индексом)?

2
задан 13 April 2017 в 15:24

1 ответ

Используя удар для этой задачи должно быть возможным, но я предпочитаю делать манипуляции сложной матрицей со сценарием 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)])

Этот сценарий позволяют нескольким значениям быть удаленными одновременно из схемы/ключа, переданной сценарию.

3
ответ дан 2 December 2019 в 03:03

Другие вопросы по тегам:

Похожие вопросы: