Передача стандартного ввода в 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"