minor tweaks to use noop instead of cat and make nested process substitution easier to read