Why is /etc/profile not being loaded during non-login bash shell sessions?

68,210

Solution 1

Per default, gnome-terminal does not start bash as a login shell (I assume you mean bash started inside a gnome-terminal). That means bash will not read /etc/profile or ~/.profile. As you have correctly observed, bash will read those files if started as a login shell.

The quick fix to your problem is to configure gnome-terminal to start bash as a login shell so it will read /etc/profile. To do so click on the Edit menu of gnome terminal, then "Profile Preferences", then enable "Run Command as a login shell".

I do not recommend doing this because it messes up the distinction between ~/.profile and ~/.bashrc.

Ideally ~/.bashrc should do setup for bash, typically required everytime bash is started. While ~/.profile should do stuff which is not bash and required only once, during login.

For more information read this question and answer at superuser talking about the difference between bashrc and profile.

From your problem description it seems that the rvm script needs to be loaded only once, during login. As far as I know Ubuntu has configured the graphical login to read /etc/profile/ and ~/.profile. That means, after logging out and a logging in once, the rvm script should be active.

If it still doesn't work, then perhaps the rvm script needs to be loaded for every bash session. If that is the case then bashrc is the more appropriate place for the script.

Solution 2

There is, however, a file /etc/bash.bashrc that is read by gnome-terminal and is the "system-wide .bashrc file for interactive bash(1) shells."

My call to the rvm function, [[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" , went in there, and works just fine for the couple of users on that system.

Solution 3

Installing RVM as multiuser requires the user to run this command:

(because Ubuntu does not source /etc/profile.d at the login)

echo '[[ -s "/etc/profile.d/rvm.sh" ]] && . "/etc/profile.d/rvm.sh" # Load RVM function' >> ~/.bashrc
Share:
68,210

Related videos on Youtube

Marc
Author by

Marc

SDE at aws.amazon.com/ec2

Updated on September 18, 2022

Comments

  • Marc
    Marc over 1 year

    For 11.04, I did a fresh install of my system. Part of that install was to install rvm, which sticks a rvm.sh in /etc/profile.d/. This doesn't work as /etc/profile (which loads each +r in /etc/profile.d/*.sh) is not being loaded. According to the documentation, the profile is only sourced if bash is run in login. To verify this, I invoked bash --login, after which rvm was available.

    This has worked for me in previous versions of Ubuntu without any configuration. That is, a fresh install of 10.10 will correctly source profile/.d.

    My question is: is there anything I'm doing wrong, or are there some new assumptions being made in Natty that have broken this? My current workaround is to source /etc/profile in ~/.bashrc (which is awful as profile is meant to load before bashrc's, but does the trick).

  • Marc
    Marc about 13 years
    Setting 'run command as a login shell' did indeed load /etc/profile (and thus the .d's). Thanks for the explanation - it seems like this requires follow up with the rvm folk.
  • Luca
    Luca about 13 years
    Ubuntu 11.04 doesn't seem to read /etc/profile and ~/.profile during login. It's strange because it always worked with older versions. I think this is not a solution but a workaround.
  • geirha
    geirha about 12 years
    gnome-terminal does nothing of the sort. gnome-terminal runs bash (or whatever your login shell is set to in the passwd database) in interactive mode, and bash started interactively reads /etc/bash.bashrc. Well, at least on Debian/Ubuntu. Bash normally does not read a system wide bashrc; debian has patched it to do so.
  • Dmitri
    Dmitri about 12 years
    Yes, obviously, gnome-terminal invokes bash to read that file: if your shell is ksh, then gnome-terminal wouldn't read that file, would it? May I suggest looking up the word "pedant" in the dictionary before you continue using provocative phrases like "does nothing of the sort."
  • Waseem
    Waseem about 11 years
    @lesmana Is there a way I could enable "Run Command as a login shell" from CLI instead of GUI? I'm sshed into a remote server and cant forward X locally.
  • muru
    muru over 9 years
    Since the default .profile sources .bashrc, this would result in a loop for most users.