I was helping a friend diagnose why a strange script-like string was appearing in their PATH whenever they logged in or created a new bash shell window. (Note: Catalina now defaults to using zsh, not bash.)
Bash has a number of different configuration files it checks, and some of those the user may have chained together. So far, even the best resource on the matter I’ve found doesn’t tell the whole story.
On Apple machines, bash walks through these set of scripts and invokes a path modification tool, too.
In a nutshell, /etc/profile
calls a utility called path_helper
, and it reads a list from two places the /etc/paths
file and everything in the /etc/paths.d
directory.
My friend had thought the /etc/paths
file was a script and not a list, and years ago had erroneously put an export PATH=
statement in there. Because it came last (for his setup), he ignored the problem.
Our false start to correct is was upon seeing an export statement in the PATH itself, we assumed it was a faulty quoting problem in a script, so primarily went looking in the script files on the left side of the graph …and wasted what felt like hours doing so.
Only after using Bash’s return
statement to short-circuit script executions and using a blunt hammer of renaming scripts out of execution’s way, and the problem still persisted, did deeper exploration go down the system resources.
I hope this diagram helps get others out of trouble.
UPDATE 2020-07-08: Bob Rudis caught a typo (the text said /etc/profile, where it should have said /etc/paths); he also shared a link to GNU’s Bash Startup Files.