使用するplutil
plistから始めましょう:
> defaults write org.my.test '{aDict = {anArray = ();};}'
plist -p
plist を stdout に出力するために使用します。
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
または、json を読み取って操作するためのコマンド ライン ツールである jq をインストールすることもできます。
> 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
また、他の plist から値を取得するために使用することもできます
> 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"
]
}
}
少し長いですが、それでもワンライナーです。