Передача стандартного ввода в plistbuddy - PullRequest
0 голосов
/ 18 мая 2018

У меня есть скрипт для отображения содержимого 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 ]

0 голосов
/ 26 мая 2018

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

unzip -qp test.ipa Payload/*.app/Info.plist | plutil  -convert xml1 -r -o - -- -
0 голосов
/ 18 мая 2018

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

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

tempPlist="$(mktemp)"
unzip -qp test.ipa "Payload/*.app/Info.plist" > "$tempPlist"
/usr/libexec/PlistBuddy -c Print "$tempPlist"
rm "$tempPlist"
...