make SPACK_SHELL detection more robust (#9712)
Spack shell detection in setup-env.sh was originally based on examining the executable name of $$ (from "ps"). In some cases this does not actually give the name of the shell used, for example when setup-env.sh was invoked from a script using "#!". To make shell detection more robust, this adds a preliminary check for shell variables which indicate that the shell is bash or zsh; the executable name of $$ is retained as a fallback if those variables are not defined.
This commit is contained in:
parent
8ca384875e
commit
6971f8ae32
@ -236,7 +236,18 @@ export SPACK_ROOT=${_sp_prefix}
|
|||||||
# Determine which shell is being used
|
# Determine which shell is being used
|
||||||
#
|
#
|
||||||
function _spack_determine_shell() {
|
function _spack_determine_shell() {
|
||||||
PS_FORMAT= ps -p $$ | tail -n 1 | awk '{print $4}' | sed 's/^-//' | xargs basename
|
# This logic is derived from the cea-hpc/modules profile.sh example at
|
||||||
|
# https://github.com/cea-hpc/modules/blob/master/init/profile.sh.in
|
||||||
|
#
|
||||||
|
# The objective is to correctly detect the shell type even when setup-env
|
||||||
|
# is sourced within a script itself rather than a login terminal.
|
||||||
|
if [ -n "${BASH:-}" ]; then
|
||||||
|
echo ${BASH##*/}
|
||||||
|
elif [ -n "${ZSH_NAME:-}" ]; then
|
||||||
|
echo $ZSH_NAME
|
||||||
|
else
|
||||||
|
PS_FORMAT= ps -p $$ | tail -n 1 | awk '{print $4}' | sed 's/^-//' | xargs basename
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
export SPACK_SHELL=$(_spack_determine_shell)
|
export SPACK_SHELL=$(_spack_determine_shell)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user