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):
export CDPATH="some/path:another/path/with/a/src/sub-directory"
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:
# ...