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.plist
und einrichten .PATH
Ich weiß, dass diese Plist-Datei im Binärformat vorliegen muss, und ich weiß, wie ich mit dem defaults write
Befehl 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.
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 -o
oder 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 plist
es 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 export
eine 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 export
Syntax (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.