I have written a few posts in the past about parsing data from property list files in scripts and Terminal. My usual tool for this is
PlistBuddy’s syntax is… well… eccentric.
For example, you can pipe the output of another command into
scout, something you can only convince
PlistBuddy to do with some major shell syntax hackery.
So instead of this:
> /usr/libexec/PlistBuddy -c "print :dsAttrTypeStandard\:RealName:0" /dev/stdin <<< $(dscl -plist . read /Users/armin RealName)
scout I can use this much clearer syntax:
> dscl -plist . read /Users/armin RealName | scout "dsAttrTypeStandard:RealName"
The tool can also modify existing files, by changing, adding or deleting keys.
scout can also parse JSON and (non plist) XML files, so it can also stand in as a replacement for
xpath. It will also color-code output for property list, XML and JSON files.
I have been using
scout interactively in the Terminal for a while now. So far, I have been refraining from using
scout in scripts I use for deployment. To use a non-system tool in deployment scripts, you need to ensure the tool is deployed early in the setup process. Then you also have to write your scripts in a way that they will gracefully fail or fallback to
PlistBuddy in the edge case where
scout is not installed:
scout="/usr/local/bin/scout" if [ ! -x "$scout"]; then echo "could not find scout, exiting..." exit 1 fi realName=$( dscl -plist . read /Users/armin RealName | scout "dsAttrTypeStandard:RealName" )
All of this overhead, adds extra burden to using a tool. The good news is that
scout comes as a signed and notarized package installer, which minimizes deployment effort.
I wills be considering scout for future projects. If anyone at Apple is reading this: please hire Alexis and integrate
scout or something like it in macOS.