diff --git a/README.md b/README.md index 2e14f926..6a998203 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,6 @@ executables injected into your `PATH`, determines which Python version has been specified by your application, and passes your commands along to the correct Python installation. - ### Understanding PATH When you run a command like `python` or `pip`, your operating system @@ -83,7 +82,6 @@ precedence over another one at the end. In this example, the `/usr/local/bin` directory will be searched first, then `/usr/bin`, then `/bin`. - ### Understanding Shims pyenv works by inserting a directory of _shims_ at the front of your @@ -104,7 +102,6 @@ operating system will do the following: * Run the shim named `pip`, which in turn passes the command along to pyenv - ### Choosing the Python Version When you execute a shim, pyenv determines which Python version to use by diff --git a/libexec/pyenv b/libexec/pyenv index ff0ee417..5677a52c 100755 --- a/libexec/pyenv +++ b/libexec/pyenv @@ -28,26 +28,26 @@ if enable -f "${BASH_SOURCE%/*}"/../libexec/pyenv-realpath.dylib realpath 2>/dev else [ -z "$PYENV_NATIVE_EXT" ] || abort "failed to load \`realpath' builtin" -READLINK=$(type -p greadlink readlink | head -1) -[ -n "$READLINK" ] || abort "cannot find readlink - are you missing GNU coreutils?" + READLINK=$(type -p greadlink readlink | head -1) + [ -n "$READLINK" ] || abort "cannot find readlink - are you missing GNU coreutils?" -resolve_link() { - $READLINK "$1" -} + resolve_link() { + $READLINK "$1" + } -abs_dirname() { - local cwd="$(pwd)" - local path="$1" + abs_dirname() { + local cwd="$PWD" + local path="$1" - while [ -n "$path" ]; do - cd "${path%/*}" - local name="${path##*/}" - path="$(resolve_link "$name" || true)" - done + while [ -n "$path" ]; do + cd "${path%/*}" + local name="${path##*/}" + path="$(resolve_link "$name" || true)" + done - pwd - cd "$cwd" -} + pwd + cd "$cwd" + } fi if [ -z "${PYENV_ROOT}" ]; then @@ -71,10 +71,10 @@ if [ -z "${PYENV_DIR}" ]; then fi if [ -z "${PYENV_DIR}" ]; then - PYENV_DIR="$(pwd)" + PYENV_DIR="$PWD" else cd "$PYENV_DIR" 2>/dev/null || abort "cannot change working directory to \`$PYENV_DIR'" - PYENV_DIR="$(pwd)" + PYENV_DIR="$PWD" cd "$OLDPWD" fi export PYENV_DIR diff --git a/libexec/pyenv-which b/libexec/pyenv-which index 42d8d298..a17d06ca 100755 --- a/libexec/pyenv-which +++ b/libexec/pyenv-which @@ -23,7 +23,8 @@ remove_from_path() { path_before="$result" result="${result//:$path_to_remove:/:}" done - echo "${result%:}" + result="${result%:}" + echo "${result#:}" } PYENV_COMMAND="$1" diff --git a/test/which.bats b/test/which.bats index 91b35337..bd67b4c0 100644 --- a/test/which.bats +++ b/test/which.bats @@ -59,6 +59,16 @@ create_executable() { assert_success "${PYENV_TEST_DIR}/bin/kill-all-humans" } +@test "doesn't include current directory in PATH search" { + export PATH="$(path_without "kill-all-humans")" + mkdir -p "$PYENV_TEST_DIR" + cd "$PYENV_TEST_DIR" + touch kill-all-humans + chmod +x kill-all-humans + PYENV_VERSION=system run pyenv-which kill-all-humans + assert_failure "pyenv: kill-all-humans: command not found" +} + @test "version not installed" { create_executable "3.4" "py.test" PYENV_VERSION=3.3 run pyenv-which py.test