在BASH中,如何为数组中的现有元素在plist上使用默认值写入



我想使用命令行工具defaults更改以下列表中DEFAULT_VALUE_PLACEHOLDER的值

<?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>PreferenceSpecifiers</key>
    <array>
        <dict>
            <key>DefaultValue</key>
            <string>DEFAULT_VALUE_PLACEHOLDER</string>
            <key>Type</key>
            <string>PSTitleValueSpecifier</string>
            <key>Title</key>
            <string>Version</string>
            <key>Key</key>
            <string>prefs_item_version_title</string>
        </dict>
    </array>
    <key>StringsTable</key>
    <string>Root</string>
</dict>
</plist>

我意识到一个简单的查找和替换就可以完成它(例如sed),但是,我想要一个更健壮的方法来完成它。

我想是这样的,但是语法的文档不够好。

defaults write $PLIST_PATH  'PreferenceSpecifiers { 1 = { DefaultValue = $NEW_DETAULT_VALUE; }; }'

我不认为有任何方法可以做到这一点与defaults(这不是完全丑陋)-你最好做这样的事情与PlistBuddy代替:

/usr/libexec/PlistBuddy -c "set :PreferenceSpecifiers:0:DefaultValue '$NEW_DEFAULT_VALUE'" "$PLIST_PATH"

注意,不像defaults, PlistBuddy期望你给它的文件名包含".plist";此外,(如上所示),数组索引从0开始。

相关内容

  • 没有找到相关文章

最新更新