我有 bash 脚本,它是为 OS X 编写的,现在移植到 Linux 上。我无法访问 Linux 盒子。 bash 脚本将使用OS X 上可用的defaults read
and命令从 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 的操作系统。