Wie kann ich beheben, wenn macOS defaults write -data mit einem einfachen Anführungszeichenfehler fehlschlägt?

Ich möchte eine plist mit "defaults write" erstellen, leider kann ich plutil oder ein anderes Dienstprogramm nicht verwenden.

HEX-Daten: 62706c69 73743030 d4010203

Dies ist die Liste, die ich erstellen muss

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Architectures for arm64</key>
    <dict>
        <key>org.my.test</key>
        <array>
            <data>
            YnBsaXN0MDDUAQID
            </data>
            <string>x86_64</string>
        </array>
    </dict>
</dict>
</plist>

Ich verwende diese Syntax:

defaults write ~/Desktop/org.my.test '{"Architectures for arm64" = {org.my.test = (-data <62706c69 73743030 d4010203>, "x86_64");};}'

und ich erhalte den Fehler: 2021-06-26 09:21:09.280 defaults[27260:1348922] Konnte nicht parsen: {"Architectures for arm64" = {org.my.test = (-data <62706c69 73743030 d4010203> , "x86_64");};}. Versuchen Sie es mit einfachen Anführungszeichen.

Ich kann nicht herausfinden, wo ich die einfachen Anführungszeichen setzen soll

kann mir bitte jemand helfen?

Können Sie die XML-Struktur nicht einfach direkt erstellen (es ist schließlich alles Text)?
Nein, weil ich Informationen zu der bereits vorhandenen Liste hinzufügen muss

Antworten (3)

-dataist ein Parameter defaultsbeim Schreiben eines einzelnen Datenwerts.

Sie schreiben eine ganze Eigenschaftsliste auf einmal, schließen Sie dieses Argument also nicht als Teil der Eigenschaftslistenzeichenfolge ein. Entfernen Sie -dataaus Ihrem Befehl und es funktioniert gut, wenn Sie die gesamte Zeichenfolge als Inhalt der Eigenschaftslistendatei schreiben.

Beim Schreiben einer vollständigen Eigenschaftsliste werden die Daten als Hex in spitzen Klammern codiert, wie Sie es getan haben.

Du könntest auch verwenden defaults import.

Auf diese Weise können Sie die Daten als genau den XML-Text angeben, den Sie in Ihrer Frage anzeigen. Der umgekehrte Befehl zum Anzeigen der Ergebnisse lautet defaults export -.

Wenn Sie die Manpage nach Standardeinstellungen durchsehen, enthält sie Optionen zum Erstellen von Wörterbüchern und Arrays und zum Hinzufügen von Elementen zu vorhandenen Arrays und Schlüsselpaaren zu vorhandenen Wörterbüchern.

  -array      Allows the user to specify an array as the value for the given preference key:

                       defaults write somedomain preferenceKey -array element1 element2 element3

                 The specified array overwrites the value of the key if the key was present at the time of the write. If
                 the key was not present, it is created with the new value.

     -array-add  Allows the user to add new elements to the end of an array for a key which has an array as its value.
                 Usage is the same as -array above. If the key was not present, it is created with the specified array as
                 its value.

     -dict       Allows the user to add a dictionary to the defaults database for a domain.  Keys and values are speci-
                 fied in order:

                       defaults write somedomain preferenceKey -dict key1 value1 key2 value2

                 The specified dictionary overwrites the value of the key if the key was present at the time of the
                 write. If the key was not present, it is created with the new value.

     -dict-add   Allows the user to add new key/value pairs to a dictionary for a key which has a dictionary as its
                 value. Usage is the same as -dict above. If the key was not present, it is created with the specified
                 dictionary as its value.

Ein struktureller Ansatz kann besser funktionieren, als zu versuchen, alles mit Satzzeichen zu stopfen.

Ich verstehe Ihren Standpunkt, bestimmte Optionen zu verwenden, um standardmäßig jeden Wert zu schreiben, aber bisher erklärt diese Antwort nicht, wie diese Optionen zum Schreiben von Daten verwendet werden, wie in der Frage angegeben. OP kann mit seiner Methode bereits erfolgreich Arrays und Wörterbücher schreiben. Wenn Sie die plist aus der Frage aufschlüsseln, muss OP ein Array schreiben, also kann ich Ihrer Antwort entnehmen, dass -array/ -array-adddie richtigen Optionen sind, aber wie kann man einige Daten hinzufügen? Das Manpage-Snippet sagt nur element1. Vielleicht könnte diese Antwort erklären, was element1zu verwenden ist, um Daten zu einem Array mit diesen Optionen hinzuzufügen?