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

Posted

技术标签:

【中文标题】在 BASH 中,如何使用 plist 上的默认值写入数组中的现有元素?【英文标题】:In BASH, how do I use defaults write on a plist for a existing element in an array? 【发布时间】:2013-01-16 10:09:44 【问题描述】:

我想使用命令行工具defaults更改以下plist中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),但是,我想要一种更强大的方法。

我认为是这样的,但the documentation for the syntax 还不够好。

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

【问题讨论】:

使用objective-c / cocoa ? 抱歉,BASH 用于 CI 服务器,而不是在 Objective-c 中。生病编辑问题。 【参考方案1】:

我认为defaults 没有任何方法可以做到这一点(这并不完全丑陋)——你最好用 PlistBuddy 来做这样的事情:

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

请注意,与defaults 不同,PlistBuddy 希望您给它的文件名包含“.plist”;此外,(如上所示),数组索引从 0 开始。

【讨论】:

以上是关于在 BASH 中,如何使用 plist 上的默认值写入数组中的现有元素?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 plist 文件中为 UIColor 设置默认的 NSUserDefaults 值?

以 $HOME 开头的 plist 中存储的路径不会在 bash 脚本命令中扩展

Bash - 在 plist 文本文件中修改 WhitelistedBlockedPlugins

相应地为 Plist 上的项目保存用户默认数组

用bash脚本从plist中提取字符串,也许是sed?

使用终端或 bash 脚本创建和写入 .plist