Occasionally I like command line tools to also say the output, in addition to ‘printing’ it (to STDOUT).
A current context is starting a server locally with updated information. The start up takes time, so I tend to not wait at the command line for it to fully boot.
I wanted a noticeable signal when the thing is up – and also a confirmation that the version of the information source *is* actually updated. The commands tee
and (the macOS) say
do this for me:
tee >(say&)
tee
copies the output of its input to STDOUT
(usually the terminal) and the given file. The construction >(other command&)
causes tee to send the input not to a file but to othercommand
and the &
causes that command to return immediately (instead of returning only after the command to finish).
Overall, I do something like this. The system returns a lengthy JSON string, so I use jq to get to the version information I’m looking for:
curl -s -u <username:thepassword> “<url_to_locally_running_service>” | jq “<path_to_version_info_in_json>” | tee >(say&)
The GitHub page explains that
jq is a lightweight and flexible command-line JSON processor.
https://stedolan.github.io/jq/
It’s well worth trying, if you’re dealing with JSON input on the command line.