Commit 53c34c0e authored by Andrew Gregory's avatar Andrew Gregory
Browse files

set bash env variables before running scripts

Bash sources user configuration files under a number of conditions that
can cause issues with scripts when bash is used as the scriptlet shell.

Bash assumes it's being run under rsh/ssh if stdin is connected to a
socket and sources the user bashrc unless the environment variable
$SHLVL is >= 2.  Commit 6a4c6a02
switched from pipes to sockets when communicating with child processes
to work around SIGPIPE issues.  Normally $SHLVL would be inherited from
the shell running pacman, but operations involving scriptlets are
generally run with sudo which does not let the $SHLVL variable through
unless specifically configured to.

Similarly $BASH_ENV can cause bash to source user-specified configuration
files if set.

Signed-off-by: default avatarAndrew Gregory <>
parent bddfcc3f
Pipeline #16502 passed with stage
in 1 minute and 50 seconds
......@@ -659,6 +659,11 @@ int _alpm_run_chroot(alpm_handle_t *handle, const char *cmd, char *const argv[],
"/", strerror(errno));
/* bash thinks it's being run under rsh/ssh if stdin is a socket and
* sources ~/.bashrc unles SHLVL is > 1 */
setenv("SHLVL", "1", 0);
/* bash sources $BASH_ENV when run non-interactively */
execv(cmd, argv);
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment