Mac终端无临时文件用PlistBuddy解析hdiutil输出遇问题求助
解决Mac终端用PlistBuddy解析hdiutil输出(无需临时文件)
你猜的完全没错——PlistBuddy默认确实不直接读取标准输入(STDIN),它只认实实在在的文件路径,这就是你两个命令失败的核心原因:
为什么你的命令不行?
- 命令1:
hdiutil info -plist | PlistBuddy -c "Print"
当你用管道把plist内容传给PlistBuddy时,它因为没收到指定的文件路径,直接触发了默认的帮助信息输出,相当于你只敲了PlistBuddy -c "Print"却没给目标文件。 - 命令2:
PlistBuddy -c "Print" $(hdiutil info -plist)
这里的命令替换$(...)会把hdiutil输出的整个XML格式plist文本当成文件名传给PlistBuddy,系统自然找不到这个奇怪的“文件名”,还会因为文本里的XML标签报错格式无效。
正确的解决办法
利用Mac系统里的/dev/stdin文件描述符,它可以把标准输入的内容伪装成一个“虚拟文件”供PlistBuddy读取:
hdiutil info -plist | PlistBuddy -c "Print" /dev/stdin
如果要提取特定字段(比如第一个镜像的挂载点),可以直接指定plist路径,不用先打印整个内容:
hdiutil info -plist | PlistBuddy -c "Print :0:mount-point" /dev/stdin
这样既不用生成临时文件,又能让PlistBuddy正常解析hdiutil输出的plist内容啦。
内容的提问来源于stack exchange,提问作者tenhittender
相关产品推荐
相关产品推荐

