Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

After installing some programs in /opt/xxx/bin, I want to add /opt/xxx/bin to system $PATH for all users's non-login shell. What should I do?

share|improve this question

3 Answers 3

up vote 4 down vote accepted

On Debian and other systems that use PAM (which is most of them nowadays), you can set environment variables (including PATH) in /etc/environment. This will work for any login method that uses the pam_env module (either in the auth section or in the session section); on Debian that should be all of them (at least the ones that provide ways to log in and run commands).

share|improve this answer

The default path could be set in /etc/profile like Joe said but also in $HOME/.profile. I also have plenty of packages i compiled on my own (with the common procedure ./configure --prefix=/opt/<name>) installed in /opt. To execute the binaries in /opt/<name>/bin without any additional effort I added

OPTDIR=/opt

for i in $OPTDIR/* ; do
    BINDIR=$i/bin
    if [ -d $BINDIR ] ; then
        if [ -z $PATH ] ; then
            PATH=$BINDIR
        else
            PATH=$BINDIR:$PATH
        fi
    fi
done

export PATH

to my $HOME/.profile which in your case would be /etc/profile. Now even if i install packages under /opt in the future i don't have to worry about accessing the related binaries in /opt/.*/bin since the path is automatically added to $PATH.

Because the additional software is not necessary stable i prefer $HOME/.profile over /etc/profile.


A small remark: /etc/.profile respectively $HOME/profile is not executed by your default shell but by dash. A lightweight variant of bash which reduces the load during the boot process.

share|improve this answer
    
Neither /etc/profile nor ~/.profile is not executed by non-login shell. –  user955091 Sep 10 '12 at 0:33
    
You are right, my answer is not fully related to your question. I just described what i did to get things running. If you aren't using X my approach does what you want since every non-login shell is a child-process of the login-shell. If you are using X you can source the little script i have posted in the init file of your display manager (in most cases Xsession). Now every child process of the display manager have the defined $PATH variable. In the described two cases my approach definitely works and you can access every binaries under /opt/.*/bin. –  user1146332 Sep 10 '12 at 8:53

The default path can be set in /etc/profile

But I was just looking on my Ubuntu system, and it's set in /etc/environment

share|improve this answer
2  
/etc/profile is not executed by non-login shell. –  user955091 Sep 10 '12 at 0:30

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.