DEV Community

loading...

How to Add Path Uniquely to $PATH

serhatteker profile image Serhat Teker Originally published at tech.serhatteker.com on ・1 min read

There are 2 easy options for this: Add as a "configuration" or a "function".

Configuration

Add below into your .profile/.bash_profile/.zprofile. You can add it
into .bashrc/.zshrc as well but I do not prefer this method. Since environment variables should be set in ~/.profile.

Add a path to $PATH if it is not already in $PATH:

[[ ":$PATH:" != *":/path/to/add:"* ]] && PATH="${PATH}:/path/to/add"

For instance add ~/projects dir to $PATH:

[[ ":$PATH:" != *":${HOME}/projects:"* ]] && PATH="${PATH}:${HOME}/projects"

If you need the path at the start use PATH=/path/to/add:${PATH} instead of PATH=${PATH}:/path/to/add.

Function

Also you can use a function to do this:

path-append () {
        if ! echo "$PATH" | /bin/grep -Eq "(^|:)$1($|:)" ; then
           if [ "$2" = "before" ] ; then
              PATH="$1:$PATH"
           else
              PATH="$PATH:$1"
           fi
        fi
}

It will check whether the path given is already in the $PATH and also lets you append it "after" or "before" to $PATH as desired —default is "after":

For example:

$ echo $PATH
/usr/local/bin:/usr/bin:/bin

## Add to the end; default
$ path-append /sbin
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/sbin

## Add to the start
$ path-append /usr/sbin before
$ echo $PATH
/sbin:/usr/local/bin:/usr/bin:/bin

All done!

Discussion (0)

pic
Editor guide