将stdin传给plistbuddy

时间:2018-05-18 09:44:36

标签: bash plistbuddy

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

<uib-tabset active="active">
    <uib-tab index="0" heading="Static title">Static content</uib-tab>
    <uib-tab index="$index+1" 
     ng-repeat="tab in tabs" heading="Tab 1" disable="tab.disabled">
      {{tab.content}}
    </uib-tab>
    <uib-tab index="3" select="alertMe()">
      <uib-tab-heading>
        <i class="glyphicon glyphicon-bell"></i> Alert!
      </uib-tab-heading>
      I've got an HTML heading, and a select callback. Pretty cool!
    </uib-tab>
</uib-tabset>

对于大文件,这可能需要一些时间,直到它们被提取到临时文件夹只是为了读取一个小的Info.plist(xml)文件。 我想知道我是否可以提取Info.plist文件并将其传递给plistbuddy?我试过了:

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}

但这会产生

/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 时,我将Info.plist文件的输出发送到终端:

unzip -qp test.ipa Payload/*.app/Info.plist

如何将Info.plist的内容传递给plistbuddy?

2 个答案:

答案 0 :(得分:2)

通常命令支持&#34; - &#34;作为stdin的同义词,但是这个PlistBuddy工具并没有。

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

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

答案 1 :(得分:0)

我最终选择了plutil作为chepner建议:

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