patternbashTip
PATH Management: Adding Directories Without Breaking Anything
Viewed 0 times
PATHenvironment variablewhichtypeprofile.dduplicate pathbinary resolution
linux
Error Messages
Problem
Adding a directory to PATH incorrectly causes duplicate entries, overrides system binaries with wrong versions, or the change does not persist across sessions.
Solution
Add PATH extensions idiomatically and guard against duplicates.
# Append to PATH (lower priority)
export PATH="$PATH:/new/bin"
# Prepend to PATH (higher priority — will shadow system binaries)
export PATH="/new/bin:$PATH"
# Guard against duplicates (portable)
case ":$PATH:" in
*":/new/bin:"*) ;;
*) export PATH="$PATH:/new/bin" ;;
esac
# For persistence, add to ~/.profile or /etc/profile.d/custom.sh
echo 'export PATH="$PATH:/opt/myapp/bin"' >> ~/.profile
# For all users
echo 'export PATH="$PATH:/opt/myapp/bin"' | sudo tee /etc/profile.d/myapp.sh
sudo chmod +x /etc/profile.d/myapp.sh
# Check full resolved path of a command
which python3
type -a python3Why
PATH is searched left-to-right. Prepending gives higher priority. Without duplicate guards, sourcing .bashrc multiple times creates an ever-growing PATH string. The
case pattern is shell-portable and efficient.Gotchas
- Never export PATH without the existing $PATH value unless you want to completely replace it.
- An empty entry in PATH (e.g.,
PATH=:/bin) causes the shell to search the current directory — a security risk. - Snap and flatpak add their own PATH entries via /etc/profile.d — manual additions should come after.
- PATH changes in /etc/environment do not support variable expansion — cannot reference $PATH there.
Revisions (0)
No revisions yet.