- #!/usr/bin/env bash
- #
- # Summary: Display the full path to an executable
- #
- # Usage: pyenv which <command>
- #
- # Displays the full path to the executable that pyenv will invoke when
- # you run the given command.
-
- set -e
- [ -n "$PYENV_DEBUG" ] && set -x
-
- # Provide pyenv completions
- if [ "$1" = "--complete" ]; then
- exec pyenv shims --short
- fi
-
- expand_path() {
- if [ ! -d "$1" ]; then
- return 1
- fi
-
- local cwd="$(pwd)"
- cd "$1"
- pwd
- cd "$cwd"
- }
-
- remove_from_path() {
- local path_to_remove="$(expand_path "$1")"
- local result=""
-
- if [ -z "$path_to_remove" ]; then
- echo "${PATH}"
- return
- fi
-
- local paths
- IFS=: paths=($PATH)
-
- for path in "${paths[@]}"; do
- path="$(expand_path "$path" || true)"
- if [ -n "$path" ] && [ "$path" != "$path_to_remove" ]; then
- result="${result}${path}:"
- fi
- done
-
- echo "${result%:}"
- }
-
- OLDIFS="$IFS"
- IFS=: versions=($(pyenv-version-name))
- IFS=: PYENV_VERSION="${versions[*]}"
- IFS="$OLDIFS"
- PYENV_COMMAND="$1"
-
- if [ -z "$PYENV_COMMAND" ]; then
- pyenv-help --usage which >&2
- exit 1
- fi
-
- for version in "${versions[@]}"; do
- if [ "$version" = "system" ]; then
- PATH="$(remove_from_path "${PYENV_ROOT}/shims")"
- PYENV_COMMAND_PATH="$(command -v "$PYENV_COMMAND" || true)"
- else
- PYENV_COMMAND_PATH="${PYENV_ROOT}/versions/${version}/bin/${PYENV_COMMAND}"
- fi
- if [ -x "$PYENV_COMMAND_PATH" ]; then
- break
- fi
- done
-
- OLDIFS="$IFS"
- IFS=$'\n' scripts=(`pyenv-hooks which`)
- IFS="$OLDIFS"
- for script in "${scripts[@]}"; do
- source "$script"
- done
-
- if [ -x "$PYENV_COMMAND_PATH" ]; then
- echo "$PYENV_COMMAND_PATH"
- else
- echo "pyenv: $PYENV_COMMAND: command not found" >&2
-
- versions="$(pyenv-whence "$PYENV_COMMAND" || true)"
- if [ -n "$versions" ]; then
- { echo
- echo "The \`$1' command exists in these Python versions:"
- echo "$versions" | sed 's/^/ /g'
- echo
- } >&2
- fi
-
- exit 127
- fi
|