diff --git a/activate.sh b/activate.sh index 85b3e26..4b42d30 100755 --- a/activate.sh +++ b/activate.sh @@ -295,18 +295,25 @@ autoenv_leave() { _files=$( command -v chdir >/dev/null 2>&1 && chdir "${from_dir}" || builtin cd "${from_dir}" _hadone='' - while [ "$PWD" != "" ] && [[ $to_dir != $PWD* ]]; do - _file="$PWD/${AUTOENV_ENV_LEAVE_FILENAME}" - if [ -f "${_file}" ]; then - if [ -z "${_hadone}" ]; then - printf %s "${_file}" - _hadone='1' - else - printf %s " + while [ "$PWD" != "" ] && [ "$PWD" != "/" ]; do + case $to_dir/ in + $PWD/*) + break + ;; + *) + _file="$PWD/${AUTOENV_ENV_LEAVE_FILENAME}" + if [ -f "${_file}" ]; then + if [ -z "${_hadone}" ]; then + printf %s "${_file}" + _hadone='1' + else + printf %s " ${_file}" + fi fi - fi - command -v chdir >/dev/null 2>&1 && chdir "$(pwd)/.." || builtin cd "$PWD/.." + command -v chdir >/dev/null 2>&1 && chdir "$(pwd)/.." || builtin cd "$PWD/.." + ;; + esac done ) diff --git a/tests/test_cd_env_leave.sh b/tests/test_cd_env_leave.sh new file mode 100644 index 0000000..ff07ad9 --- /dev/null +++ b/tests/test_cd_env_leave.sh @@ -0,0 +1,12 @@ +# shellcheck shell=sh + +. "${FUNCTIONS}" +. "${ACTIVATE_SH}" + +# Prepare files/directories +mkdir -pv 'a/b' 'a/bz' +echo 'echo zulu' > 'a/b/.env.leave' + +AUTOENV_ENABLE_LEAVE=1 +cd 'a/b' +patterntest 'echo "Y" | cd ../../a/bz' 'zulu$'