diff --git a/lib/cli.zsh b/lib/cli.zsh index 6605fe66d..48fa8995b 100644 --- a/lib/cli.zsh +++ b/lib/cli.zsh @@ -738,6 +738,9 @@ function _omz::reload { # Old zsh versions don't have ZSH_ARGZERO local zsh="${ZSH_ARGZERO:-${functrace[-1]%:*}}" + # ZSH_ARGZERO is how zsh was invoked, not the path to it, so re-resolve + # anything that is not absolute (see #13919) + [[ "${zsh#-}" != /* ]] && (( $+commands[zsh] )) && zsh="$commands[zsh]" # Check whether to run a login shell [[ "$zsh" = -* || -o login ]] && exec -l "${zsh#-}" || exec "$zsh" } @@ -919,6 +922,9 @@ function _omz::update { if [[ "$(builtin cd -q "$ZSH"; git rev-parse HEAD)" != "$last_commit" ]]; then # Old zsh versions don't have ZSH_ARGZERO local zsh="${ZSH_ARGZERO:-${functrace[-1]%:*}}" + # ZSH_ARGZERO is how zsh was invoked, not the path to it, so re-resolve + # anything that is not absolute (see #13919) + [[ "${zsh#-}" != /* ]] && (( $+commands[zsh] )) && zsh="$commands[zsh]" # Check whether to run a login shell [[ "$zsh" = -* || -o login ]] && exec -l "${zsh#-}" || exec "$zsh" fi