Bash and CDPATH
Fun fact, having
CDPATH exported will cause it to also emit any fuzzy matched to stdout.
I spent entirely too long digging into a
Makefile where it had something clever like:
check-gofmt: $(eval HAS_DELTA := $(shell cd src && gofmt -l $(PKGS)) if [[ -n "$HAS_DELTA" ]]; then echo "reformat your code please:\n$HAS_DELTA"; exit 1; fi
Turns out that the path
src didn't exist, but because I had mistakenly exported a
CDPATH variable in my
.bashrc (which has since been corrected):
There was a matching sub directory path that Make's
$(shell cd src && ...) matched and emitted which made that clever
if [[ -n "$HAS_DELTA" ]] really upset. When it failed, the message printed was the fuzzy-matched path itself.. which wasn't helpful in trying to diagnose things.
How did I diagnose this? Tracing!
# Turn on shell tracing to see where the output is printed: SHELL = /usr/bin/bash -x check-gofmt: # ...