mirror of
https://github.com/systemd/systemd
synced 2025-10-06 00:13:24 +02:00
profile.d: don't bail if $SHELL_* variables are unset
If - for whatever reason - a script uses set -u (nounset) and includes
/etc/profile.d/70-systemd-shell-extra.sh (e.g. transitively via
/etc/profile) the script would fail with:
/etc/profile.d/70-systemd-shell-extra.sh: line 15: SHELL_PROMPT_PREFIX: unbound variable
For example:
$ cat > foo.sh <<EOF
#!/bin/sh
set -u
source /etc/profile
EOF
$ chmod 700 foo.sh
$ ./foo.sh
/etc/profile.d/70-systemd-shell-extra.sh: line 15: SHELL_PROMPT_PREFIX: unbound variable
Fix this by using shell parameter substitution[^1] (which is a POSIX
shell concept) to set the $SHELL_* variables to the empty string if
undefined.
[^1]: https://pubs.opengroup.org/onlinepubs/9699919799.2018edition/utilities/V3_chap02.html
(cherry picked from commit 12e33d332b
)
This commit is contained in:
committed by
Luca Boccassi
parent
cd727031a4
commit
6b90a13789
@@ -12,14 +12,14 @@
|
||||
# credentials shell.prompt.prefix, shell.prompt.suffix and shell.welcome, and
|
||||
# are propagated into these environment variables by pam_systemd(8).
|
||||
|
||||
if [ -n "$SHELL_PROMPT_PREFIX" ]; then
|
||||
if [ -n "${SHELL_PROMPT_PREFIX-}" ]; then
|
||||
PS1="$SHELL_PROMPT_PREFIX$PS1"
|
||||
fi
|
||||
|
||||
if [ -n "$SHELL_PROMPT_SUFFIX" ]; then
|
||||
if [ -n "${SHELL_PROMPT_SUFFIX-}" ]; then
|
||||
PS1="$PS1$SHELL_PROMPT_SUFFIX"
|
||||
fi
|
||||
|
||||
if [ -n "$SHELL_WELCOME" ]; then
|
||||
if [ -n "${SHELL_WELCOME-}" ]; then
|
||||
printf '%b\n' "$SHELL_WELCOME"
|
||||
fi
|
||||
|
Reference in New Issue
Block a user