diff --git a/internal/shell/bash.go b/internal/shell/bash.go index b3909de7..18266dc9 100644 --- a/internal/shell/bash.go +++ b/internal/shell/bash.go @@ -24,27 +24,29 @@ import ( // Based on https://github.com/direnv/direnv/blob/master/internal/cmd/shell_bash.go const bashHook = ` -{{.EnvContent}} - -export __VFOX_PID=$$; -export __VFOX_SHELL='bash'; - -_vfox_hook() { - local previous_exit_status=$?; - trap -- '' SIGINT; - eval "$("{{.SelfPath}}" env -s bash)"; - trap - SIGINT; - return $previous_exit_status; -}; -if ! [[ "${PROMPT_COMMAND[*]:-}" =~ _vfox_hook ]]; then - if [[ "$(declare -p PROMPT_COMMAND 2>&1)" == "declare -a"* ]]; then - PROMPT_COMMAND=(_vfox_hook "${PROMPT_COMMAND[@]}") - else - PROMPT_COMMAND="_vfox_hook${PROMPT_COMMAND:+;$PROMPT_COMMAND}" +if [[ -z "$__VFOX_PID" || "$__VFOX_PID" != "$$" || "$__VFOX_SHELL" != "bash" ]]; then + {{.EnvContent}} + + export __VFOX_PID=$$; + export __VFOX_SHELL='bash'; + + _vfox_hook() { + local previous_exit_status=$?; + trap -- '' SIGINT; + eval "$("{{.SelfPath}}" env -s bash)"; + trap - SIGINT; + return $previous_exit_status; + }; + if ! [[ "${PROMPT_COMMAND[*]:-}" =~ _vfox_hook ]]; then + if [[ "$(declare -p PROMPT_COMMAND 2>&1)" == "declare -a"* ]]; then + PROMPT_COMMAND=(_vfox_hook "${PROMPT_COMMAND[@]}") + else + PROMPT_COMMAND="_vfox_hook${PROMPT_COMMAND:+;$PROMPT_COMMAND}" + fi fi -fi -trap 'vfox env --cleanup' EXIT + trap 'vfox env --cleanup' EXIT +fi ` type bash struct{} diff --git a/internal/shell/zsh.go b/internal/shell/zsh.go index 6df35788..2d19ce34 100644 --- a/internal/shell/zsh.go +++ b/internal/shell/zsh.go @@ -25,7 +25,7 @@ type zsh struct{} var Zsh = zsh{} const zshHook = ` -if [[ -z "$__VFOX_PID" || -z "$__VFOX_SHELL" ]]; then +if [[ -z "$__VFOX_PID" || "$__VFOX_PID" != "$$" || "$__VFOX_SHELL" != "zsh" ]]; then {{.EnvContent}} export __VFOX_PID=$$;