When I echo $PATH I get this: Users/myusername/.node_modules_global/bin:/Users/mac/.node_modules_global/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/mac/Library/Android/sdk/platform-tools:/platform-tools
.
I want to remove some paths from this, but when I open the file using the command vim /etc/paths
, I get the following results:
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
Is the file /etc/paths different from the $PATH variable?
Best Answer
/etc/paths
is part of what's used to set up$PATH
for shell processes. When you open a new Terminal window, it startsbash
, which runs several startup scripts:/etc/profile
AND~/.bash_profile
OR (if that doesn't exist)~/.bash_login
OR (if that doesn't exist either)~/.profile
. These scripts set up the shell environment, including$PATH
.One of the things
/etc/profile
does is run/usr/libexec/path_helper
, which reads/etc/paths
and any files in/etc/paths.d
, and adds their contents to$PATH
. But this is just a starting point; your own startup script (if any exist) can add to$PATH
, edit it, replace it completely, etc.It looks to me like your startup script (and/or things it runs) is adding a number of entries to the basic set it gets from
/etc/paths
. "Users/myusername/.node_modules_global/bin:/Users/mac/.node_modules_global/bin:" is added to the beginning of$PATH
(meaning those directories will be searched first), and ":/Users/mac/Library/Android/sdk/platform-tools:/platform-tools" is added at the end. If you want to know exactly what's adding them, you need to look at your startup script.BTW, this process for setting up
$PATH
only applies to bash "login" shells. Anything run by a bash shell will inherit$PATH
from it, so probably have essentially the same thing. bash non-login shells follow a somewhat different setup process. Other shells, and things not started from a shell at all (e.g. cron jobs) may have completely different$PATHs
.