1

2 人の顧客から提供された 2 つの plist ファイルがあり、そのたびに手動で更新する必要があります。

最初に、必要な文字列を抽出できます。

defaults read /Applications/TestAPP/info.plist TestValue
TESTAPP-TESTAPP-TESTAPP

2 つ目は、2 つ目のファイル内の配列の末尾に前の結果を追加する必要があります。

defaults read /Applications/SecondTestAPP/info.plist TestValue2 
  <key>TEST</key>
    <array>
        <string>FIRSTONE</string>
        <string>SECONDONE</string>
        <string>THIRDONE</string>
    </array>
</dict> 

Any idea ? のTESTAPP-TESTAPP-TESTAPP後に追加する必要があります。 私はすでに試しました: しかし、うまくいきません。<string>THIRDONE</string>

defaults write /Applications/SecondTestAPP/info.plist '<dict><key>TestValue</key><array><string>TESTAPP-TESTAPP-TESTAPP</string></array></dict>'

4

2 に答える 2

7

使用するplutil

plistから始めましょう:

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

plist -pplist を 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"
    ]
  }
}

少し長いですが、それでもワンライナーです。

于 2016-12-19T04:38:24.717 に答える