【问题标题】:Pass stdin to plistbuddy将标准输入传递给 plistbuddy
【发布时间】:2018-05-18 09:44:36
【问题描述】:

我有一个脚本来显示 .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?

【问题讨论】:

  • 您可能想改用plutil,它可以使用- 作为文件名从标准输入中读取。
  • 我最近不得不停止使用plutil 并改用PlistBuddy 来更改com.apple.developer.team-identifierplutil 坚持认为我提供的值不正确。否则,我一般更喜欢plutil

标签: bash plistbuddy


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    按照 chepner 的建议,我最终选择了 plutil:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-15
      • 2016-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-06
      • 2010-11-17
      • 2015-01-14
      相关资源
      最近更新 更多