[Fix] `nvm_strip_path`: Preserve leading/trailing colons
Path lists in environmental variables often give special meaning to empty entries (e.g. in PATH or MANPATH). These are represented by leading or trailing colons, or by doubled colons in the middle of the list. Adjust the awk invocation to correctly deal with trailing colons by printing the separator before every field except the first, and then printing the final separator that is read from the input - this will either be a colon or the null string. This preserves leading and trailing colons in all cases while not adding extra colons in the wrong place. Add test to confirm the correct behaviour. Fixes #3144
parent
a1601eddb8
commit
15eba7b7e6
3
nvm.sh
3
nvm.sh
|
@ -823,7 +823,8 @@ nvm_strip_path() {
|
||||||
path = substr($0, length(NVM_DIR) + 1)
|
path = substr($0, length(NVM_DIR) + 1)
|
||||||
if (path ~ "^(/versions/[^/]*)?/[^/]*'"${2-}"'.*$") { next }
|
if (path ~ "^(/versions/[^/]*)?/[^/]*'"${2-}"'.*$") { next }
|
||||||
}
|
}
|
||||||
{ print }' | command paste -s -d: -
|
# The final RT will contain a colon if the input has a trailing colon, or a null string otherwise
|
||||||
|
{ printf "%s%s", sep, $0; sep=RS } END { printf "%s", RT }'
|
||||||
}
|
}
|
||||||
|
|
||||||
nvm_change_path() {
|
nvm_change_path() {
|
||||||
|
|
|
@ -16,3 +16,9 @@ TEST_PATH="$NVM_DIR/v0.10.5/bin:/usr/bin:$NVM_DIR/v0.11.5/bin:$NVM_DIR/v0.9.5/bi
|
||||||
STRIPPED_PATH=`nvm_strip_path "$TEST_PATH" "/bin"`
|
STRIPPED_PATH=`nvm_strip_path "$TEST_PATH" "/bin"`
|
||||||
|
|
||||||
[ "$STRIPPED_PATH" = "/usr/bin:/usr/local/bin" ] || die "Not correctly stripped: $STRIPPED_PATH "
|
[ "$STRIPPED_PATH" = "/usr/bin:/usr/local/bin" ] || die "Not correctly stripped: $STRIPPED_PATH "
|
||||||
|
|
||||||
|
TEST_PATH=":/a/b/bin::/c/d/bin:"
|
||||||
|
|
||||||
|
STRIPPED_PATH=`nvm_strip_path "$TEST_PATH" "/bin"`
|
||||||
|
|
||||||
|
[ "$STRIPPED_PATH" = "$TEST_PATH" ] || die "Stripping does not preserve colons: $STRIPPED_PATH "
|
||||||
|
|
Loading…
Reference in New Issue