2012-01-08 2 views
5

У меня возникли проблемы с информацией о направлении из плютиля. Я хочу проверить, содержит ли .plist ключ CFBundleShortVersionString. Я не думаю, что у plutil есть возможность проверить, существует ли ключ, поэтому я думал, что буду просто plutil -show file.plist >file.txt, но это просто не работает. :/Поэтому я попытался направить файл plist из stdout в файл с параметром дампа plutil -dump file.plist >file.txt без везения. :/Я также попытался направлять stdout в stderr и stderr и stdout в файл. Ничего не получилось. Кто-нибудь знает как это сделать?Получение информации от plutil

ответ

6

Если вам необходимо проверить вашу .plist существования ключа CFBundleShortVersionString, то лучше использовать PlistBuddy так:

/usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" 1.plist || echo "CFBundleShortVersionString doesn't exist" 
0
$ plutil -show StorePurchasesInfo.plist 2>&1 | grep cbk 

возвращает все строки в PLIST с текстом «СВК» в них. По какой-то причине plutil отправляет свой вывод на stderr. Вышеупомянутый перенаправляет stderr на stdout, поэтому он может быть успешно передан на grep (или перенаправлен в файл или что угодно).

+1

plutil не имеет -show флага. – Diziet

+0

Я предполагаю, что это должна быть другая версия, она также имеет флаг -show в вопросе OP. –

0

Для рода ответ на ваш вопрос, вы можете создать небольшой Баш скрипт, содержащий:

#!/bin/bash 

cp $1 /tmp/$$.tmp 
plutil -convert xml1 /tmp/$$.tmp 
cat /tmp/$$.tmp 
rm /tmp/$$.tmp 

Если вы звоните сценарий Баш pldump сделать его исполняемым с chmod +x pldump. Поместите его где-то на своем пути и использовать его так:

tlh-m0290:Preferences paul.downs$ ./pldump com.example.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>station.data.downloaded</key> 
    <true/> 
</dict> 
</plist> 

Я не вижу никакого другого способа сделать plutil вывод на стандартный вывод.

+0

Я думаю, что трюк '2> & 1' в моем ответе выше сделает вывод' plutil' в 'stdout'? –

0

plutil -extract CFBundleShortVersionString xml1 -o - App-Info.plist команда выводит содержимое CFBundleShortVersionString собственности

0

Oneliner, который не зависит от дополнительной утилиты для установки:

plutil -extract CFBundleShortVersionString xml1 -o - ./Info.plist | sed -n "s/.*<string>\(.*\)<\/string>.*/\1/p"

Смежные вопросы