16

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?

3
  • Which version of OS X? I don't have /etc/paths in mine, but I'm running 10.4.11 and things have probably changed since then
    – Fox
    Commented Apr 8, 2017 at 0:52
  • 1
    But according to an answer on AskDifferent, /etc/paths is used to generate the default $PATH, which you can later modify
    – Fox
    Commented Apr 8, 2017 at 0:57
  • It's the default. By the time user starts their shell, though, it would be modified by other files that shell sources, like ~/.bashrc or ~/.profile Commented Sep 14, 2018 at 17:38

2 Answers 2

21

/etc/paths is part of what's used to set up $PATH for shell processes. When you open a new Terminal window, it starts bash, 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.

1
  • 1
    Note that for non-login shells (e.g. /usr/local/bin/bash as installed by brew, without the -l argument), /usr/libexec/path_helper is not used, and /usr/local/bin is not included by default in the $PATH. To use path_helper in a script or interactively, the command is eval $(/usr/libexec/path_helper). Commented May 8, 2019 at 22:14
0

First places I'd look to check for modifications are,

~/.profile
~/.bashrc
~/.bash_profile

If you're using something that's not Bash, check the configuration files for it to see any mention of PATH.

0

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .