The shell path (i.e. PATH) for a user in OSX is a variable defining a set of locations in the file system whereby the user can use certain applications, commands and shell scripts without the need to specify the full path to that command or program in the Terminal.
If you enter abc
in Terminal the first occurrence of abc
in one of the paths defined in PATH will be executed.
To access or print the variable PATH you have to use $PATH.
Example:
echo $PATH
The variable PATH has a general and a user specific part.
1. General part:
The general part is defined by the (superior) file /etc/paths and by the (inferior) content of the folder /etc/paths.d.
The default content of the file /etc/paths (in OS X) is:
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin
The default folder /etc/paths.d is empty. On older systems with an X11 installation the folder contains a file named 50-X11 with the content
/usr/X11/bin
which adds an additional path (/usr/X11/bin) to PATH.
The prepended number- just defines the load order.
My /etc/paths.d folder contains the following files:
/etc/paths.d/40-mysql #file content: /usr/local/mysql/bin
/etc/paths.d/50-X11 #file content: /usr/X11/bin
/etc/paths.d/60-testdisk #file content: /usr/local/testdisk
/etc/paths.d/70-git #file content: /usr/local/git/bin
The resulting PATH is
echo PATH$
/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/mysql/bin:/usr/X11/bin:/usr/local/testdisk:/usr/local/git/bin
2. User-specific part:
The user-specific part is defined by the file ~/.bash_profile. If you have created a folder bin in your user folder and installed some apps in there you can add the following line in ~/.bash_profile
export PATH="/Users/username/bin:$PATH"
or
export PATH="$PATH:/Users/username/bin"
The first entry preferably executes a command abc
found in the /bin folder of the user, the second one a command abc
found in the general path before executing an identical named one in the ~/bin folder.
This part of PATH defined by .bash_profile is only effective for the respective user.
To add the path entered in .bash_profile to the current PATH immediately you have to source the file once:
source ~/.bash_profile
3. Temporary paths
By issuing export PATH="/Users/username/bin:$PATH"
or export PATH="$PATH:/Users/username/bin"
in Terminal you can add a path temporarily.
This part of PATH is lost after closing the Terminal window, logging out or rebooting the Mac.
Examples (using the general part from above):
The file ~/.bash_profile contains export PATH="/Users/username/bin:$PATH"
and you issue in Terminal export PATH="/Users/username/bin2:$PATH"
then the resulting PATH is:
/Users/username/bin2:/Users/username/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/mysql/bin:/usr/X11/bin:/usr/local/testdisk:/usr/local/git/bin
\____temp. path_____/
The file ~/.bash_profile contains export PATH="$PATH:/Users/username/bin"
and you issue in Terminal export PATH="/Users/username/bin2:$PATH"
then the resulting PATH is:
/Users/username/bin2:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/mysql/bin:/usr/X11/bin:/usr/local/testdisk:/usr/local/git/bin:/Users/username/bin
\____temp. path_____/
Summary
PATH (or $PATH) is defined by several files: /etc/paths, the files in /etc/paths.d and ~/.bash_profile and in case of adding a temporary path by additional RAM content.
PATH
is an environment variable.$PATH
is the string you use when you want to access its contents.