viime viikolla macadmin Kyle Crawford on havainnut, että MacOS High Sierra defaults
poistaa ominaisuusluettelotiedoston, jossa on virheellinen plist/XML-syntaksi, vaikka vain yrittää lukea tietoja. Erik Holthamilla on tarkempi openradar-bugi.
Patrik Wardle on löytänyt asiaankuuluvan koodin, joka poistaa tiedoston, kun sitä ei vahvisteta.
tämä on huono. Kiitos kaikille osallisille tämän löytämisestä, dokumentoinnista ja jakamisesta.
tämä on uutta käyttäytymistä High Sierralla. En ole vielä varma, mikä versio High Sierrasta tämä uusi käyttäytyminen otettiin käyttöön. Käyttäytyminen on järkevää asetustiedostoa yrittävän sovelluksen yhteydessä, mutta mielivaltaisia tiedostoja poistava defaults
– työkalu on tietenkin vaarallinen.
päivitys:tämä käyttäytyminen on korjattu 10.13.4. Edelleen on kuitenkin hyvä käytäntö välttää
defaults
kaikkea muuta kuin varsinaisia preferenssitiedostoja.
Mitä tehdä?
kuten tavallista, älä panikoi. Tämä vaikuttaa vain Macit käynnissä Korkea Sierra ja korruptoitunut tai rikki tiedostoja. Jos skripti kuitenkin osoittaa komennon defaults
vahingossa eri tiedostoon, se poistaa sen. Joten sinun täytyy käyttää sitä varoen.
on luultavasti hyvä tapa tarkistaa tiedosto ennen kuin yrität muokata sitä defaults
– komennolla skriptissä, jossa on plutil
– komento:
if ! plutil -lint path/to/file.plist; then echo "broken plist" exit 1else defaults path/to/file …fi
vaihtoehdot oletuksille
Vaihtoehtoisesti voit ja sinun tulisi käyttää plutil
tai PlistBuddy
omaisuusluettelotiedostojen lukemiseen ja muokkaamiseen.
Lue lisää
plutil
,PlistBuddy
ja muista työkaluista lukea ja kirjoittaa omaisuusluetteloita Kirjaani: ”Applen järjestelmänvalvojien ominaisuusluettelot, Asetukset ja profiilit”
plutil
ei valitettavasti ole todella hyödyllistä lukea yhtä arvoa omaisuusluettelotiedostosta. extract
verbi osoittaa mitä tahansa arvoa omana plistinaan. Komento plutil
on hyödyllinen olemassa olevien plist-tiedostojen muokkaamiseen. (Lue yksityiskohdat plutil
– komennosta.)
PlistBuddy
, on kuitenkin erittäin hyödyllistä sekä lukea kirjoitusarvoja omaisuusluettelotiedostoon:
$ /usr/libexec/PlistBuddy berry.plist -c "print size"$ /usr/libexec/PlistBuddy berry.plist -c "set size enormous"
PlistBuddy
on lisäetu antaa lisätä tai muokata arvoja, jotka ovat sisäkkäisiä syvällä dict
tai array
rakenteissa.
lisätietoa PlistBuddy
saat sen miessivulta tai minun kirjaltani.
PlistBuddy
Vuorovaikutteinen tila on myös erittäin hyödyllinen.
joten defaults-komento on kuollut?
Ei.
Apple on varoittanut meitä käyttämästä defaults
yleistä ominaisuusluetteloa tiedostojen muokkaamiseen ja jäsentämiseen jo pitkään defaults
komennon man-sivulla:
varoitus: defaults-komento muutetaan tulevassa pääjulkaisussa toimimaan vain asetustunnuksilla. General plist manipulation utilities taitetaan eri komentoriviohjelmaan.
kuten tässä varoituksessa todetaan, defaults
– työkalu lukee ja kirjoittaa tietoja plist-tiedostoihin macOS: n asetusjärjestelmän kautta. Tämän etuna on, että työkalu saa (ja muuttaa) nykyisen arvon riippumatta siitä, onko se välimuistissa muistissa vai ei. Kun sovellus kuuntelee ilmoituksia siitä, että mieltymys on muuttunut (harva tekee), siitä ilmoitetaan.
suosituimmuustunnusten tiedostot tallennetaan yleensä /Library/Preferences/
, ~/Library/Preferences
tai niiden ByHost
alikansioihin. Sandboxed sovellukset ovat mieluummin plist tiedostot niiden säiliössä.
siellä on kuitenkin monia muita tiedostoja, jotka ovat ominaisuusluettelotiedostoja, jotka eivät kuulu käyttäjän oletusjärjestelmään: launchd
tiedostoja, määritysprofiileja ja AutoPkg: n reseptejä vain muutamia mainitakseni.
Mac-järjestelmänvalvojat käyttävät Applen varoituksesta huolimatta yleisesti defaults
– työkalua yleisten plist-tiedostojen luomiseen, lukemiseen ja muokkaamiseen. Kuten edellä mainittiin, plutil
, PlistBuddy
tai suora manipulointi Obj-C: n, Pythonin tai Swiftin kautta ovat parempia vaihtoehtoja yleisille plist-tiedostoille.