aboutsummaryrefslogblamecommitdiff
path: root/zsh/profile.d/zsh.sh
blob: 37ec8014b9be48886e1d49b348aa7096e7e107f2 (plain) (tree)
1
2
3
4
5
6
7






                                                                               







                                                                             
                               
                        



                 

                       

                                                                               

                                                                     


                          


                                       

        
            
  
# Zsh before version 5.3.0 emulating POSIX sh(1) or Korn shell only sources the
# interactive shell startup file described in ENV if it's set after
# /etc/profile is sourced, but before ~/.profile is. The other shells I have
# tried (including modern shells emulating POSIX sh(1)) wait until after
# ~/.profile is read. This seems to have been fixed in Zsh commit ID fde365e,
# which was followed by release 5.3.0.

# This hack is only applicable to interactive zsh invoked as sh/ksh, when ENV
# exists, so check each of those:
## Interactive?
case $- in
    *i*) ;;
    *) return ;;
esac
## zsh?
[ -n "$ZSH_VERSION" ] || return
## Invoked as sh or ksh?
case $ZSH_NAME in
    sh|ksh) ;;
    *) return ;;
esac
## ENV exists?
[ -e "$ENV" ] || return

# Iterate through the zsh version number to see if it's at least 5.3.0; if not,
# we'll source $ENV ourselves, since ~/.profile probably didn't do it
if (
    zvs=$ZSH_VERSION
    for fv in 5 3 0 ; do
        zv=${zvs%%[!0-9]*}
        ! [ "$zv" -gt "$fv" ] || exit 1
        ! [ "$zv" -lt "$fv" ] || exit 0
        zvs=${ZSH_VERSION#*.}
    done
) ; then
    . "$ENV"
fi