Linuxのplistファイルから値を取得する

Linuxのplistファイルから値を取得する

OS X用に書かれ、Linuxに移植されたbashスクリプトがあります。私はLinuxボックスにアクセスできません。 bashスクリプトはOS Xで利用可能で、コマンドを使用してdefaults readplistファイルから値を読み込みます。PlistBuddy

Linuxシステムにはこれらのコマンドがないので、回避策を探しています。ユーザーがLinuxシステムの特定のキーのplistファイルから値を取得するのに役立つライブラリ/スクリプト(Perlを推奨)はありますか?

sed/を使ってみましたawkが、出力は信頼できません。plutil.plplistファイルを別の形式に変換する同様のスクリプトが見つかりました。

実際のLinuxシステムに展開する前に変更をテストできるように、MacでUbuntuを実行する仮想マシンを設定しました。

答え1

libplistが好きなように動作するようです。スクリプトでUbuntuパッケージ名「libplist-utils」を参照できます。

Description-ja:Appleプロパティリストコンバータこのパッケージには、AppleプロパティリストファイルをバイナリからXMLにまたはその逆に変換するツールが含まれています。これはlibimobiledeviceスタックの一部であり、iDevice(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ファイルを読み書きでき.plisthttps://docs.python.org/3.9/library/plistlib.html

MyKeyたとえば、次の値を取得します./Info.plist

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

これはPython3を実行しているすべてのオペレーティングシステムで機能します。

関連情報