从 Linux 上的 plist 文件中获取值

从 Linux 上的 plist 文件中获取值

我有 bash 脚本,它是为 OS X 编写的,现在移植到 Linux 上。我无法访问 Linux 盒子。 bash 脚本将使用OS X 上可用的defaults readand命令从 plist 文件中读取值。PlistBuddy

由于 Linux 机器没有这些命令,我​​正在寻找解决方法。是否有库/脚本(最好是 Perl)可以帮助用户从 Linux 机器上给定键的 plist 文件中获取值?

我尝试使用sed/ awk,但输出不可靠。我遇到过类似plutil.pl将 plist 文件转换为其他格式的脚本。

我在 Mac 上安装了运行 Ubuntu 的虚拟机,这样我就可以在部署到实际的 Linux 机器之前测试我的更改。

答案1

libplist 似乎可以满足您的要求。您可以在脚本中引用一个 Ubuntu 软件包名称“libplist-utils”:

Description-en: Apple 属性列表转换器 该软件包包含用于将 Apple 属性列表文件从二进制转换为 XML 的工具,反之亦然。它是 libimobiledevice 堆栈的一部分,提供对 iDevices(iPod、iPhone、iPad ...)的访问。

主页:http://www.libimobiledevice.org/

安装命令:

apt-get install libplist-utils

使用示例:

plistutil -i Info.plist

答案2

由于.plist文件已经是 XML(或者可以轻松转换),因此您只需要一些东西来解码 XML。

对于该用途xml2

$ cat com.apple.systemsound.plist
<?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>com.apple.sound.beep.volume</key>
    <real>1</real>
</dict>
</plist>
$ xml2 < com.apple.systemsound.plist
/plist/@version=1.0
/plist/dict/key=com.apple.sound.beep.volume
/plist/dict/real=1
$ 

你应该能够弄清楚剩下的事情。

或者对于 Perl,use XML::Simple;(请参阅perldoc参考资料)将 XML 数据结构放入散列中。

答案3

Python3 有一个标准库:

plistlib可以读取和写入.plist文件,https://docs.python.org/3.9/library/plistlib.html

MyKey例如获取from的值./Info.plist

$ python3 -c "import plistlib; print(plistlib.load(open('./Info.plist', 'rb'))['MyKey'])" 
MyValue

这适用于任何运行 python3 的操作系统。

相关内容