minulý týden kolega MacAdmin Kyle Crawford zjistil, že na macOS High Sierra defaults
odstraní soubor seznamu vlastností s neplatnou syntaxí PLIST/XML, i když se jen pokusíte číst data. Erik Holtham má podrobnější chybu OpenRadar.
Patrik Wardle našel příslušný kód, který odstraní soubor, když není ověřen.
to je špatné. Děkujeme všem zúčastněným za nalezení, dokumentování a sdílení.
Toto je nové chování v High Sierra. Zatím si nejsem jistý, která verze High Sierra byla představena. Toto chování má smysl v kontextu aplikace, která se pokouší číst soubor nastavení, ale nástroj defaults
, který odstraňuje libovolné soubory, je samozřejmě nebezpečný.
aktualizace: toto chování bylo opraveno v 10.13.4. Je však stále dobrým zvykem vyhnout se
defaults
pro cokoli jiného než skutečné soubory předvoleb.
co dělat?
jako obvykle nepropadejte panice. To ovlivní pouze počítače Mac se systémem High Sierra a poškozené nebo poškozené soubory. Pokud však máte skript, který omylem ukazuje příkaz defaults
na jiný soubor, odstraní to. Takže ji musíte používat opatrně.
pravděpodobně je dobré ověřit soubor před pokusem o jeho úpravu příkazem defaults
ve skriptu příkazem plutil
:
if ! plutil -lint path/to/file.plist; then echo "broken plist" exit 1else defaults path/to/file …fi
alternativy k výchozím
Alternativně můžete a měli byste použít plutil
nebo PlistBuddy
ke čtení a úpravě souborů seznamu vlastností.
další informace o
plutil
,PlistBuddy
a dalších nástrojích pro čtení a zápis seznamů vlastností v mé knize: „Seznamy vlastností, Předvolby a profily pro správce Apple“
plutil
bohužel není opravdu užitečné číst jednu hodnotu ze souboru seznamu vlastností. Sloveso extract
zobrazí libovolnou hodnotu jako vlastní plist. Příkaz plutil
je užitečný pro úpravu existujících souborů plist. (Přečtěte si podrobnosti o příkazu plutil
.)
PlistBuddy
, je však velmi užitečné pro čtení hodnot zápisu do souboru seznamu vlastností:
$ /usr/libexec/PlistBuddy berry.plist -c "print size"$ /usr/libexec/PlistBuddy berry.plist -c "set size enormous"
PlistBuddy
má další výhodu v tom, že umožňuje přidávat nebo upravovat hodnoty vnořené hluboko do struktur dict
nebo array
.
můžete získat více informací o PlistBuddy
v jeho manuálové stránce nebo mé knize.
interaktivní režim PlistBuddy
je také velmi užitečný.
takže výchozí příkaz je mrtvý?
č.
společnost Apple nás varuje, abychom nepoužívali defaults
pro editaci a analýzu souborů se seznamem obecných vlastností na manuálové stránce příkazu defaults
:
varování: výchozí příkaz bude změněn v nadcházející hlavní verzi, aby fungoval pouze na doménách předvoleb. Obecné manipulační nástroje plist budou složeny do jiného programu příkazového řádku.
jak toto varování uvádí, nástroj defaults
čte a zapisuje data do souborů plist prostřednictvím systému předvoleb systému macOS. To má tu výhodu, že nástroj získá (a změní) aktuální hodnotu, ať už je uložen v paměti nebo ne. Když aplikace poslouchá oznámení, že se preference změnila (ne mnoho), bude oznámena.
soubory pro preferenční domény jsou obvykle uloženy v /Library/Preferences/
, ~/Library/Preferences
nebo jejich ByHost
podsložkách. Sandboxed aplikace budou mít své preference plist soubory ve svém kontejneru.
Existuje však mnoho dalších souborů, které jsou soubory seznamu vlastností, které nejsou součástí výchozího systému uživatele: launchd
soubory, konfigurační profily a recepty AutoPkg, abychom jmenovali jen několik.
Mac Administrátoři běžně používají nástroj defaults
, navzdory varování společnosti Apple, k vytváření, čtení a úpravě obecných souborů plist. Jak bylo uvedeno výše, plutil
, PlistBuddy
nebo přímá manipulace pomocí Obj-C, Python nebo Swift, jsou lepší volbou pro obecné soubory plist.