Использование plutil
Давайте начнем с PLIST:
> defaults write org.my.test '{aDict = {anArray =();};}'
Использование plist -p
для печати PLIST на стандартный вывод.
plutil -p ~/Library/Preferences/org.my.test.plist
{
"aDict" => {
"anArray" => [
]
}
}
Используйте plist -insert
, чтобы добавить что-то к массиву
> plutil -insert aDict.anArray.0 -string a ~/Library/Preferences/org.my.test.plist
> plutil -p ~/Library/Preferences/org.my.test.plist
{
"aDict" => {
"anArray" => [
0 => "a"
]
}
}
Ваша жизнь будет лучше, если вы можете вставить новый элемент во главе списка с индексом 0.
> plutil -insert aDict.anArray.0 -string before_a ~/Library/Preferences/org.my.test.plist
> plutil -p ~/Library/Preferences/org.my.test.plist
{
"aDict" => {
"anArray" => [
0 => "before_a"
1 => "a"
]
}
}
Но если вы должны положить его в конец, то вам нужно выяснить длину массива. Мы сделаем это, сначала получив массив самостоятельно.
> plutil -extract aDict.anArray json -o - ~/Library/Preferences/org.my.test.plist
["before_a","a"]
Чтобы получить количество элементов, вы можете подсчитать количество «», а затем добавить 1 - но это будет иметь ошибки, если строки запятые в них.
> echo "$(plutil -extract aDict.anArray json -o - ~/Library/Preferences/org.my.test.plist | grep -F -o ',' | wc -l) + 1" | bc
2
Или вы можете установить jq, инструмент командной строки для чтения и управления json.
> brew install jq
> plutil -extract aDict.anArray json -o - ~/Library/Preferences/org.my.test.plist | jq '. | length'
2
Затем вы можете использовать это значение, чтобы добавить свое значение в конец массива.
> plutil -insert aDict.anArray.$(plutil -extract aDict.anArray json -o - ~/Library/Preferences/org.my.test.plist | jq '. | length') -string b ~/Library/Preferences/org.my.test.plist
> plutil -p ~/Library/Preferences/org.my.test.plist
{
"aDict" => {
"anArray" => [
0 => "before_a"
1 => "a"
2 => "b"
]
}
}
Вы также хотите использовать plutil
, чтобы получить значение из другого списка свойств
> plutil -extract KEYPATH json -o - OTHER_PLIST
YOUR_VALUE
> plutil -insert aDict.anArray.$(plutil -extract aDict.anArray json -o - ~/Library/Preferences/org.my.test.plist | jq '. | length') -string $(plutil -extract KEYPATH json -o - OTHER_PLIST) ~/Library/Preferences/org.my.test.plist
> plutil -p ~/Library/Preferences/org.my.test.plist
{
"aDict" => {
"anArray" => [
0 => "before_a"
1 => "a"
2 => "b"
3 => "YOUR_VALUE"
]
}
}
Это немного долго, но один вкладыш, тем не менее.
defaults write info.plist TEST -array-add '{"string" = "Funky String"}' ... возможно –
Или, может быть, '/ usr/libexec/PlistBuddy -c" Добавить: TEST string 'FunkyString' " info.plist' –
@MarkSetchell Первый не работает. Но второй из них почти нормально, если не считать возврата: 'Добавить:": TEST "Entry уже существует" – VivienG