使用shell脚本编辑plist文件

时间:2014-10-05 10:41:00

标签: macos shell scripting plist pkgbuild

我已经使用pkgbuild创建了一个默认的Component Property List文件。该文件看起来像:

<?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">
<array>
    <dict>
        <key>BundleHasStrictIdentifier</key>
        <true/>
        <key>BundleIsRelocatable</key>
        <true/>
        <key>BundleIsVersionChecked</key>
        <true/>
        <key>BundleOverwriteAction</key>
        <string>upgrade</string>
        <key>RootRelativeBundlePath</key>
        <string>MyApp.app</string>
    </dict>
</array>
</plist>

我想使用shell脚本修改此文件。我尝试使用默认值写,但它没有做任何事情。

这样做的方法是什么?(例如:我想将BundleIsRelocatable设置为false)

7 个答案:

答案 0 :(得分:28)

此外:

plutil -replace BundleIsRelocatable -bool false plistfilename.plist

答案 1 :(得分:3)

使用PlistBuddy, a simple tutorial HERE.

 /usr/libexec/PlistBuddy -c "Set :BundleIsRelocatable bool false" plistfilename.plist

它可以作为ONE命令行运行以更新键/值。 我一般用它来更新CFBundleVersion,可以找到in this post

答案 2 :(得分:3)

有点晚了,但是对于记录,你只需要指定绝对路径并将 .plist 扩展名添加到文件名中。如果您在plist文件所在的目录中运行脚本,则您的案例将被翻译为:

defaults write $PWD/YourPlistFilename.plist BundleIsRelocatable -bool false

答案 3 :(得分:2)

使用PlistBuddy

非常简单直接。 例如:

/usr/libexec/PlistBuddy ComponentPropertyList.plist
Command: Set :0:BundleIsRelocatable false
Command: save
Saving...
Command: exit

多数民众赞成!现在BundleIsRelocatable是假的:D

答案 4 :(得分:2)

使用字符串

plutil -replace NameOfProperty -string "yourNewValue" plistFileName.plist

答案 5 :(得分:1)

使用sed

sed -i '' '/<key>BundleIsRelocatable</{n;s/true/false/;}' file.plist

如果plist不是XML,请先运行plutil -convert xml1 file.plist

答案 6 :(得分:0)

Phil-CB here的最后一个回应应该是有用的。