From 305b37d386af55d8be4b497fad3f47e941c22f4a Mon Sep 17 00:00:00 2001 From: Adam McCartney Date: Wed, 25 Mar 2026 13:59:05 +0100 Subject: [PATCH 1/5] Add condition and test for explicit set of no PS1 --- .github/workflows/scripts/test_init_scripts.sh | 3 +++ init/lmod/sh | 7 ++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/.github/workflows/scripts/test_init_scripts.sh b/.github/workflows/scripts/test_init_scripts.sh index b96ef9cf..b1bf4156 100755 --- a/.github/workflows/scripts/test_init_scripts.sh +++ b/.github/workflows/scripts/test_init_scripts.sh @@ -150,6 +150,9 @@ for shell in ${SHELLS[@]}; do pattern="{EESSI/${EESSI_VERSION}} " assert_raises 'echo "$TEST_EESSI_PS1_UPDATE" | grep "$pattern"' assert_raises 'echo "$TEST_EESSI_NO_PS1_UPDATE" | grep "$pattern"' 1 + TEST_EESSI_EXPLICIT_NO_PS1_UPDATE=$($shell -c "unset PS1 ; PS1='test> ' ; export EESSI_MODULE_UPDATE_PS1=0 ; . init/lmod/$shell 2>/dev/null ; echo \"\$PS1\"") + pattern='test> ' + assert_raises 'echo "$TEST_EESSI_EXPLICIT_NO_PS1_UPDATE" | grep "$pattern"' 1 fi # End Test Suite diff --git a/init/lmod/sh b/init/lmod/sh index e405c002..43e72a87 100644 --- a/init/lmod/sh +++ b/init/lmod/sh @@ -98,7 +98,12 @@ if [ -z "$__Init_EESSI_Default_Modules" ]; then # (in an interactive shell PS1 is likely unset, so let's only do this if it is set) if [ -n "$PS1" ]; then export PS1 - export EESSI_MODULE_UPDATE_PS1=1 + if [ -n "${__Init_EESSI_MODULE_UPDATE_PS1+x}" ] || [ $((EESSI_MODULE_UPDATE_PS1)) -eq 0 ]; then + export __Init_EESSI_MODULE_UPDATE_PS1=0 + unset EESSI_MODULE_UPDATE_PS1 + else + export EESSI_MODULE_UPDATE_PS1=1 + fi fi # Figure out which shell was used to source this script, which we then use to source the corresponding From 329e317a399cdb12b0ed2e805dcab2c2b563df22 Mon Sep 17 00:00:00 2001 From: ocaisa Date: Wed, 25 Mar 2026 14:26:55 +0100 Subject: [PATCH 2/5] Tweak tests and remove unneeded code Co-authored-by: ocaisa --- .github/workflows/scripts/test_init_scripts.sh | 4 +++- init/lmod/sh | 3 +-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/scripts/test_init_scripts.sh b/.github/workflows/scripts/test_init_scripts.sh index b1bf4156..722d19a8 100755 --- a/.github/workflows/scripts/test_init_scripts.sh +++ b/.github/workflows/scripts/test_init_scripts.sh @@ -150,9 +150,11 @@ for shell in ${SHELLS[@]}; do pattern="{EESSI/${EESSI_VERSION}} " assert_raises 'echo "$TEST_EESSI_PS1_UPDATE" | grep "$pattern"' assert_raises 'echo "$TEST_EESSI_NO_PS1_UPDATE" | grep "$pattern"' 1 + # Also check when we explicitly ask for it not to be updated TEST_EESSI_EXPLICIT_NO_PS1_UPDATE=$($shell -c "unset PS1 ; PS1='test> ' ; export EESSI_MODULE_UPDATE_PS1=0 ; . init/lmod/$shell 2>/dev/null ; echo \"\$PS1\"") - pattern='test> ' + TEST_EESSI_EXPLICIT_NO_PS1_UPDATE_CALLED_TWICE=$($shell -c "unset PS1 ; PS1='$ ' ; export EESSI_MODULE_UPDATE_PS1=0 ; . init/lmod/$shell 2>/dev/null ; . init/lmod/$shell 2>/dev/null ; echo \"\$PS1\"") assert_raises 'echo "$TEST_EESSI_EXPLICIT_NO_PS1_UPDATE" | grep "$pattern"' 1 + assert_raises 'echo "$TEST_EESSI_EXPLICIT_NO_PS1_UPDATE_CALLED_TWICE" | grep "$pattern"' 1 fi # End Test Suite diff --git a/init/lmod/sh b/init/lmod/sh index 43e72a87..b176ae39 100644 --- a/init/lmod/sh +++ b/init/lmod/sh @@ -98,8 +98,7 @@ if [ -z "$__Init_EESSI_Default_Modules" ]; then # (in an interactive shell PS1 is likely unset, so let's only do this if it is set) if [ -n "$PS1" ]; then export PS1 - if [ -n "${__Init_EESSI_MODULE_UPDATE_PS1+x}" ] || [ $((EESSI_MODULE_UPDATE_PS1)) -eq 0 ]; then - export __Init_EESSI_MODULE_UPDATE_PS1=0 + if [ "${EESSI_MODULE_UPDATE_PS1-}" = "0" ] ; then unset EESSI_MODULE_UPDATE_PS1 else export EESSI_MODULE_UPDATE_PS1=1 From 0ea3ee9e0603b7322baa61e3794866ea115e61d2 Mon Sep 17 00:00:00 2001 From: Adam McCartney Date: Wed, 25 Mar 2026 14:50:43 +0100 Subject: [PATCH 3/5] Move PS1 into block where EESSI_MODULE_UPDATE_PS1 is exported --- init/lmod/sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/init/lmod/sh b/init/lmod/sh index b176ae39..9747db03 100644 --- a/init/lmod/sh +++ b/init/lmod/sh @@ -97,11 +97,11 @@ if [ -z "$__Init_EESSI_Default_Modules" ]; then # For the shells that use PS1 for the prompt, let's add the trigger to enable updating that by default # (in an interactive shell PS1 is likely unset, so let's only do this if it is set) if [ -n "$PS1" ]; then - export PS1 if [ "${EESSI_MODULE_UPDATE_PS1-}" = "0" ] ; then unset EESSI_MODULE_UPDATE_PS1 else export EESSI_MODULE_UPDATE_PS1=1 + export PS1 fi fi From 0432805ad787cab518e39f66f7bc2c22646b727e Mon Sep 17 00:00:00 2001 From: Adam McCartney Date: Wed, 25 Mar 2026 14:59:29 +0100 Subject: [PATCH 4/5] Update comment --- init/lmod/sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/init/lmod/sh b/init/lmod/sh index 9747db03..9f6d8839 100644 --- a/init/lmod/sh +++ b/init/lmod/sh @@ -25,7 +25,7 @@ # - The EESSI module also listens to environment variables so that it can be silently configured by a site # - EESSI_MODULE_FAMILY_NAME: use the value of the environment variable to set an Lmod family for the EESSI module # - EESSI_MODULE_STICKY: make the EESSI module sticky -# - EESSI_MODULE_UPDATE_PS1: have the EESSI module update PS1 to give a prompt that is prepended with "{EESSI/...} " (requires exporting PS1) +# - EESSI_MODULE_UPDATE_PS1: set to 1 (by default), the EESSI module prepends "{EESSI/...} " to PS1 (the shell prompt). Set to 0, PS1 remains unmodified. # (- EESSI_MODULE_DEBUG_INIT: enable debug print statements when loading the EESSI module) # # Effects: From b6aa04ef9055d1f6befcd1e52f2797fcf5dbbec8 Mon Sep 17 00:00:00 2001 From: ocaisa Date: Wed, 25 Mar 2026 15:03:30 +0100 Subject: [PATCH 5/5] Apply suggestion from @ocaisa --- init/lmod/sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/init/lmod/sh b/init/lmod/sh index 9f6d8839..5da34fc2 100644 --- a/init/lmod/sh +++ b/init/lmod/sh @@ -98,6 +98,8 @@ if [ -z "$__Init_EESSI_Default_Modules" ]; then # (in an interactive shell PS1 is likely unset, so let's only do this if it is set) if [ -n "$PS1" ]; then if [ "${EESSI_MODULE_UPDATE_PS1-}" = "0" ] ; then + # For certainty, we now unset it to guarantee it is not picked up by the EESSI module + # (this guarantees PS1 is not updated, even if it is exported externally to this script) unset EESSI_MODULE_UPDATE_PS1 else export EESSI_MODULE_UPDATE_PS1=1