bashshellpath

Detect if PATH has a specific directory entry in it


With /bin/bash, how would I detect if a user has a specific directory in their $PATH variable?

For example

if [ -p "$HOME/bin" ]; then
  echo "Your path is missing ~/bin, you might want to add it."
else
  echo "Your path is correctly set"
fi

Solution

  • Something really simple and naive:

    echo "$PATH"|grep -q whatever && echo "found it"
    

    Where whatever is what you are searching for. Instead of && you can put $? into a variable or use a proper if statement.

    Limitations include:

    Or using a perl one-liner:

    perl -e 'exit(!(grep(m{^/usr/bin$},split(":", $ENV{PATH}))) > 0)' && echo "found it"
    

    That still has the limitation that it won't do any shell expansions, but it doesn't fail if a substring matches. (The above matches "/usr/bin", in case that wasn't clear).