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:


Is the file /etc/paths different from the $PATH variable?

  • 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
    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
    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 Sep 14, 2018 at 17:38

2 Answers 2


/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
    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). May 8, 2019 at 22:14

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


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


You must log in to answer this question.

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