Bash tools to modify $PATH.
See the latest release for instructions.
path-tools behaves idempotently. This means that running a command the first
time might change something, but will not change something if you run it a
second time immediately after that.
Results are output to stdout, $PATH is never modified.
$PATH is an implicit parameter, you cannot use path-tools to modify any
other variable (you can work around this prefixing a command with PATH=...).
Trailing slashes on paths and literal comparators are removed before comparing.
The functions below are available both as commands and functions (by sourcing path-tools.sh).
Append ELM or move it to the end if present.
Append ELM or move it to the beginning if present.
Insert/move ELM immediately after the last occurrence of GLOB.
Append ELM if no GLOB matches were found, prepend if -p is set.
GLOB is compared using [[ ${path%/} = $GLOB ]], meaning globs
like /usr/**/bin?(/) work.
Insert/move ELM immediately before the first occurrence of GLOB.
Append ELM if no GLOB matches were found, prepend if -p is set.
GLOB is compared using [[ ${path%/} = $GLOB ]], meaning globs
like /usr/**/bin?(/) work.
Remove all matches for ELM.
Do nothing if ELM is not present.
When ENABLE_GLOB = true (false is the default) ELM is compared using
[[ ${path%/} = ELM ]], meaning globs like /usr/**/bin?(/) work.
Returns $? = 0 if ELM is present, $? = 1 if not.
When ENABLE_GLOB = true (false is the default) ELM is compared using
[[ ${path%/} = ELM ]], meaning globs like /usr/**/bin?(/) work.
Returns $? = 0 if $PATH is well-formed, $? = 1 if not.
When $PATH is not well-formed an explanation will written to stderr.
The following $PATH invariants are checked:
- Does not contain nul bytes
- Does not contain empty strings (i.e. does not start or end with
:, and does contain a::) - Has no duplicate paths