8

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?

  • 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 '17 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 '17 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 – Sergiy Kolodyazhnyy Sep 14 '18 at 17:38
10

/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.

  • 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). – Kyle Strand May 8 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.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.