将stdin传给plistbuddy

问题描述 投票:0回答:2

我有一个脚本来显示.ipa文件的Info.plist的内容:

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?

bash plistbuddy
2个回答
2
投票

通常命令支持“ - ”作为stdin的同义词,但是这个PlistBuddy工具不支持。

但您仍然可以从ipa中提取一个文件,将其另存为临时文件,然后在该文件上运行PlistBuddy:

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

0
投票

当chepner建议时,我最终得到了plutil:

unzip -qp test.ipa Payload/*.app/Info.plist | plutil  -convert xml1 -r -o - -- -
© www.soinside.com 2019 - 2024. All rights reserved.