1

The environment variables of a program differ on whether it is started from a terminal or from the desktop (by clicking on its icon).

For example: I use bash and have specific variables set in my .bashrc for development purposes. When I start my editor of choice (sublime text, but this is true for any program) from the command line everything works fine. When I start it from the desktop (gnome 3 in this case), the variables are missing.

So my question is: What is the correct way to define variables that are honored by the desktop and the terminal alike?

1

1 Answer 1

0

The variables in your .bashrc are only set up by a bash shell, which, if the variables are exported, stores the vars and their values in its environment, and passes a copy this environment to any process it starts. Starting sublime text from the desktop does not invoke bash to read .bashrc. You could set the variables globally by defining (and exporting) them in a user.sh file in /etc/profile.d (you will have to create /etc/profile.d/user.sh). If you are on a multi-user system, you could surround the definitions with if [[ "$USER" = "me" ]] ; then ... fi, so that everybody else (if that's a non-empty set) doesn't suffer with your definitions. Look at the other scripts in /etc/profile.d for hints.

To see process relationships, and environment inheritance, one could

pstree -a -c -l -p -u 1

and, of course, man pstree.

6
  • 2
    Well, using ~/.profile is reasonably a more convenient option for non-global variables than conditionals in /etc/profile.d/*.sh. Sep 27, 2015 at 20:51
  • Which programs read ~/.profile?
    – dassmann
    Sep 30, 2015 at 13:48
  • This is a Different Question, which should be asked on its own. But, you can ask your system which man pages mention .profile with find /usr/share/man -type f -print0 | xargs -0 zegrep -l '\.profile' and read them.
    – waltinator
    Sep 30, 2015 at 15:10
  • Good idea to search the man pages for config files. But anyway, I'm not nececarilly root on every system. Any suggestions for that case?
    – dassmann
    Nov 16, 2015 at 10:18
  • @dassmann: The whole /usr/share/man directory tree is world readable. Why do you think root is needed?
    – waltinator
    Nov 25, 2015 at 0:25

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .