Wie erstelle ich eine binäre Plist-Datei über die Befehlszeile unter OS X?

Ich suche nach einer Lösung, um eine binäre Plist-Datei über die Befehlszeile unter OS X zu erstellen?

Ich möchte die dort erstellen ~/.MacOSX/environment.plistund einrichten .PATH

Ich weiß, dass diese Plist-Datei im Binärformat vorliegen muss, und ich weiß, wie ich mit dem defaults writeBefehl darauf schreiben kann. Trotzdem muss ich die Datei erstellen, bevor ich dies tue, und das Erstellen einer leeren Datei funktioniert nicht.

Hinweis: Ich brauche eine Befehlszeilenlösung.

Antworten (3)

Sie könnten auch eine XML- oder eine Eigenschaftsliste im alten Stil erstellen und sie mit plutil konvertieren:

plutil -convert binary1 test.plist

Es ändert standardmäßig Dateien an Ort und Stelle. Sie können mit eine andere Ausgabedatei angeben -ooder mit stdout drucken -o -.

Mindestens schon seit Mac High Sierra (10.13.4) defaults write(z. B. in der Form defaults write com.example.test '{a = (b, 2);}'oder defaults write com.example.testb "a" '(b, 2)') werden binäre Plist-Dateien für mich erstellt, ~/Library/Preferences/selbst wenn die Datei noch nicht erstellt wurde.

Und es kann unter einem bestimmten Pfad erstellt werden, indem eine Domäne mit dem gewünschten Dateipfad ausgetauscht wird, z.

defaults write "/users/brett/Desktop/com.example.testc"  "a" '(b, 2)'

Die XML-Syntax funktioniert auch:

defaults write "/users/brett/Desktop/com.example.testc" '<dict><key>a</key><array><string>b</string><string>2</string></array></dict>'

(Die Bereitstellung von JSON funktioniert nicht (obwohl plistes in JSON konvertiert werden kann).)

Man kann auch verwenden defaults import, um eine neue binäre plist-Datei zu erstellen, unabhängig defaults import <domain> -davon, ob Sie (über stdin) eine der obigen Syntaxen verwenden können (oder defaults import <domain> pathToExistingPlist, vorausgesetzt, die referenzierte plist ist selbst eine binäre Datei).

Schließlich kann man defaults exporteine vorhandene Datei verwenden, vorausgesetzt, sie ist als XML oder ASCII-Eigenschaftsliste (oder eine andere binäre plist) ausgedrückt.

defaults export com.example.test1 /path/for/com.example.testcopy.plist

Letzteres ähnelt dem Verhalten des Befehls plutil in der Antwort von @ user495470, außer dass es nur dann kopiert wird, wenn Sie im zweiten Argument einen Pfad angeben, der zu derselben Datei führt wie die, auf die im ersten (Domäne) verwiesen wird.

Mit Ausnahme der letzteren exportSyntax (die ein Leerzeichen erzeugt <dict>, wenn im Stammverzeichnis ein Nicht-Diktat-Typ gefunden wird), werden für alle oben genannten Fehler Fehler ausgegeben, wenn etwas anderes als ein Diktat im Stammverzeichnis versucht wird.

Dieses Stück Bash hat mein Problem gelöst:

if [ ! -f '~/.MacOSX/environment.plist' ]; then
  mkdir -p '~/.MacOSX'
  defaults write ~/.MacOSX/environment.plist TEST_VAR 1
fi

Dennoch muss ich andere warnen, dass OS X 10.8 die Datei anscheinend nicht lädt.