Передача стандартного ввода в plistbuddy

У меня есть скрипт для отображения содержимого Info.plist файлов.ipa:

myTmpDir=`mktemp -d 2>/dev/null || mktemp -d -t 'myTmpDir'`
unzip -q "$1" -d "${myTmpDir}";
pathToFile=${myTmpDir}/Payload/*.app/Info.plist
/usr/libexec/PlistBuddy -c "Print" ${pathToFile}

Для больших файлов это может занять некоторое время, пока они не будут извлечены во временную папку, просто чтобы прочитать небольшой файл Info.plist (xml). Я задавался вопросом, могу ли я просто извлечь файл Info.plist и передать его plistbuddy? Я пробовал:

/usr/libexec/PlistBuddy -c "Print" /dev/stdin <<< \
$(unzip -qp test.ipa Payload/*.app/Info.plist)

но это дает

Unexpected character b at line 1
Error Reading File: /dev/stdin

Добыча работает нормально. При беге unzip -qp test.ipa Payload/*.app/Info.plist Я получаю вывод файла Info.plist на терминал:

$ unzip -qp test.ipa Payload/*.app/Info.plist
bplist00?&


!"#$%&'()*+5:;*<=>?ABCDECFGHIJKXYjmwxyIN}~N_BuildMachineOSBuild_CFBundleDevelopm...

Как я могу передать содержимое Info.plist в plistbuddy?

2 ответа

Решение

Я закончил с Плутилом, как Чепнер предложил:

unzip -qp test.ipa Payload/*.app/Info.plist | plutil  -convert xml1 -r -o - -- -

Обычно команды поддерживают "-" как синоним stdin, но этот инструмент PlistBuddy - нет.

Но вы все равно можете извлечь из ipa только один файл, сохранить его как временный файл, а затем запустить PlistBuddy для этого файла:

tempPlist="$(mktemp)"
unzip -qp test.ipa "Payload/*.app/Info.plist" > "$tempPlist"
/usr/libexec/PlistBuddy -c Print "$tempPlist"
rm "$tempPlist"
Другие вопросы по тегам