从 Linux 上的 plist 文件中获取值

smo*_*uns 6 linux osx scripting bash perl

我有为 OS X 编写的 bash 脚本,现在移植到 Linux。我无权访问 Linux 机器。bash 脚本将使用OS X 上可用的defaults readandPlistBuddy命令从 plist 文件中读取值。

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

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

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

Bor*_*duk 7

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

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

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

安装命令:

apt-get install libplist-utils
Run Code Online (Sandbox Code Playgroud)

用法示例:

plistutil -i Info.plist
Run Code Online (Sandbox Code Playgroud)


bah*_*mat 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
$ 
Run Code Online (Sandbox Code Playgroud)

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

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