The answer to your specific question is that often only
/etc/bashrc) is loaded.
There seem to be a couple of ways to address this, most are workarounds unfortunately. In no particular order of preference:
Fake a login
/etc/profile and often you can place your custom scripts in
Wrap it in a bash login
Sometimes it is easiest to trigger a login, i.e.
echo "do whatever $PATH $BASH $PS1 $0"
bash -lc 'echo "do whatever $PATH $BASH $PS1 $0"'
Manually load the profile
Do what logins do, manually load the profile
source /etc/profile;echo "do whatever $PATH $BASH $PS1 $0"
Edit global environment variables
For simple variables you can add to
/etc/environment see Ubuntu System-wide_environment_variables but variable expansion does not work
PATH="$PATH:/opt/thing" # this will NOT work
For PATH you could append to it e.g.
sudo sed -i 's#PATH=\"[^\"]*#&:/opt/thing#' /etc/environment
Edit all bash shells
You can add to
/etc/bashrc) however this normally exits early if non-interactive so you need to hack your additions on before:
# If not running interactively, don't do anything
[ -z "$PS1" ] && return
Do none of these
- Consider symlinks if you are trying to add something to the PATH
- Consider making your programs/scripts modify their own environment
- Systemd has
systemctl edit --full cron.service
I am interested in hearing if anyone else has better workarounds!