Как добавить значения в вложенные массивы или dicts, используя команду "по умолчанию написать"?

Рассмотрим предпочтительный plist с dict, который содержит массив:

Позвольте создать его:

defaults write org.my.test '{aDict = {anArray = ();};}'

Затем прочитайте его, чтобы увидеть структуру лучше:

$defaults read org.my.test
{
    aDict = {
        anArray = (
        );
    };
}

Теперь, как добавить значение в anArray с помощью команды defaults write?

Я знаю, что существует тип -array-add для добавления значений в массив, но как указать путь ключа к элементу массива?

Я пробовал это, но это не работает:

defaults write org.my.test aDict.anArray -array-add "a value"

На самом деле мне нужно добавить нестроковый тип, поэтому мне также нужно указать тип, например. -bool YES.

(Примечание: я не могу использовать PlistBuddy или plutil, так как это должно повлиять на живые настройки)

Ответы

Ответ 1

Используйте plutil, и ваша жизнь будет лучше. Значения по умолчанию не поддерживают пути ключей.

> defaults write org.my.test '{aDict = {anArray = ();};}'

> defaults read org.my.test
{
    aDict =     {
        anArray =         (
        );
    };
}

> plutil -insert aDict.anArray.0 -bool YES ~/Library/Preferences/org.my.test.plist

> defaults read org.my.test
{
    aDict =     {
        anArray =         (
            1
        );
    };
}

Я использовал defaults read, чтобы доказать, что ожидаемые входы те же, но вы, вероятно, будете использовать plutil -p ~/Library/Preferences/org.my.test.plist для чтения файла, если вы начнете использовать plutil больше.