Commit 44729b28 authored by Benoit Daloze's avatar Benoit Daloze
Browse files

Handle multiple directories in PATH having an executable for remove_commands_from_path

* This is common on Linux where e.g. /bin = /usr/bin and both are in PATH.
parent f8e17bb4
Loading
Loading
Loading
Loading
+8 −6
Original line number Diff line number Diff line
@@ -16,14 +16,16 @@ fi

remove_commands_from_path() {
  local path cmd
  local paths=( $(command -v "$@" | sed 's!/[^/]*$!!' | sort -u) )
  local NEWPATH=":$PATH:"
  while PATH="${NEWPATH#:}" command -v "$@" >/dev/null; do
    local paths=( $(PATH="${NEWPATH#:}" command -v "$@" | sed 's!/[^/]*$!!' | sort -u) )
    for path in "${paths[@]}"; do
      local tmp_path="$(mktemp -d "$TMP/path.XXXXX")"
      ln -fs "$path"/* "$tmp_path/"
      for cmd; do rm -f "$tmp_path/$cmd"; done
      NEWPATH="${NEWPATH/:$path:/:$tmp_path:}"
    done
  done
  echo "${NEWPATH#:}"
}