Buscar valores do arquivo plist no Linux

4

Eu tenho o script bash que foi escrito para o OS X e agora é portado para o Linux. Eu não tenho acesso à caixa do Linux. O script bash leria valores de arquivos plist usando o comando defaults read e PlistBuddy disponível no OS X.

Como a máquina Linux não tem esses comandos, estou procurando soluções alternativas. Existe biblioteca / script (Perl preferencialmente) que ajuda o usuário a buscar valores de arquivos plist para uma dada chave em uma máquina Linux?

Eu tentei usar sed / awk , mas a saída não é confiável. Eu me deparei com scripts como plutil.pl que convertem um arquivo plist em outros formatos.

Eu instalei uma máquina virtual rodando o Ubuntu no meu Mac para que eu possa testar minhas alterações antes de implantar na caixa Linux atual.

    
por smokinguns 30.10.2012 / 03:50

2 respostas

1

Como os arquivos .plist já são XML (ou podem ser facilmente convertidos), você só precisa de algo para decodificar o XML.

Para isso use 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
$ 

Você deve ser capaz de descobrir o resto.

Ou para Perl, use XML::Simple; (consulte perldoc para mais) para colocar a estrutura de dados XML em um hash.

    
por 30.10.2012 / 20:05
5

O libplist parece satisfazer seus requisitos. Existe um nome de pacote Ubuntu "libplist-utils" que você poderia referenciar em seu script:

Description-en: Apple property list converter This package containt tools to convert Apple property list files from binary to XML and vice-versa. It's part of the libimobiledevice stack, providing access to iDevices (iPod, iPhone, iPad ...).

Página inicial: link

Comando de instalação:

apt-get install libplist-utils

Exemplo de uso:

plistutil -i Info.plist
    
por 30.10.2012 / 16:27