Updating environment variables


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Updating environment variables
# 1  
Old 08-23-2010
Question Updating environment variables

ok, this definitely falls in the n00b category... I'm trying to upgrade Java on my server and just need to update the PATH, CLASSPATH, and JAVA_HOME environment variables.

This is what they currently are:
PATH=/usr/local/jdk1.5.0_15//bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/java/bin:/usr/local/ant/bin:/root/bin
JAVA_HOME=/usr/local/jdk1.5.0_15/
CLASSPATH=/usr/local/jdk1.5.0_15//jre/lib

This is my java install directories under /usr/local:
4 drwxr-xr-x 9 root root 4096 Sep 19 2008 jdk1.5.0_15
4 drwxr-xr-x 10 root root 4096 Sep 23 2008 jdk1.6.0_07
0 lrwxrwxrwx 1 root root 11 Sep 23 2008 java -> jdk1.6.0_07

And this is the java that is being used:
[root@dev local]# which java
/usr/local/jdk1.5.0_15/bin/java

I looked at my /etc/bashrc and it is calling /etc/profile.d/java.sh, which looks like this:
export JAVA_HOME=/usr/local/java
export ANT_HOME=/usr/local/ant
export PATH=$PATH:$JAVA_HOME/bin:$ANT_HOME/bin

What's confusing me is that I can see that the java.sh is indeed running but things aren't working out properly.
1) I can see the java.sh appends the last 2 entries of the PATH shown above. But the first entry in the path goes to the jdk1.5 with a double //bin.
2) JAVA_HOME does not point to /usr/local/java but to /usr/local/jdk1.5.0_15/

Any ideas how to figure this out?

Thanks!
# 2  
Old 08-23-2010
Quote:
I looked at my /etc/bashrc and it is calling /etc/profile.d/java.sh, which looks like this:
Im going to assume that by 'calling' you mean that the entry in bashrc looks like this:

Code:
/etc/profile.d/java.sh

If that is the case, then you need to source the java.sh rather than executing it:

Code:
. /etc/profile.d/java.sh

That's a leading dot then a space.

When you export a variable in a script, it is placed into the environment, but is 'visible' only to that script and any processes that the script invokes. Environment variables don't/cannot perk back up to the parent process. If you are indeed invoking java.sh this is what is happening.

By sourcing the file, you are executing the commands in java.sh as though they existed in the current file, .bashrc in this case. This has the effect of setting the environment variables for the current shell as you desire.
# 3  
Old 08-23-2010
ok, here's the contents of my bashrc. It's a little long. The part where it references the java.sh, or actually ./profile.d/*.sh is at the bottom:

Code:
# /etc/bashrc

# System wide functions and aliases
# Environment stuff goes in /etc/profile

# By default, we want this to get set.
# Even for non-interactive, non-login shells.
if [ $UID -gt 99 ] && [ "`id -gn`" = "`id -un`" ]; then
        umask 002
else
        umask 022
fi

# are we an interactive shell?
if [ "$PS1" ]; then
    case $TERM in
        xterm*)
                if [ -e /etc/sysconfig/bash-prompt-xterm ]; then
                        PROMPT_COMMAND=/etc/sysconfig/bash-prompt-xterm
                else
                PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}"; echo -ne "\007"'
                fi
                ;;
        screen)
                if [ -e /etc/sysconfig/bash-prompt-screen ]; then
                        PROMPT_COMMAND=/etc/sysconfig/bash-prompt-screen
                else
                PROMPT_COMMAND='echo -ne "\033_${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}"; echo -ne "\033\\"'
                fi
                ;;
        *)
                [ -e /etc/sysconfig/bash-prompt-default ] && PROMPT_COMMAND=/etc/sysconfig/bash-prompt-default
            ;;

    esac
    # Turn on checkwinsize
    shopt -s checkwinsize
    [ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \W]\\$ "
fi

if ! shopt -q login_shell ; then # We're not a login shell
        # Need to redefine pathmunge, it get's undefined at the end of /etc/profile
    pathmunge () {
                if ! echo $PATH | /bin/egrep -q "(^|:)$1($|:)" ; then
                        if [ "$2" = "after" ] ; then
                                PATH=$PATH:$1
                        else
                                PATH=$1:$PATH
                        fi
                fi
        }

        for i in /etc/profile.d/*.sh; do
                if [ -r "$i" ]; then
                        . $i
        fi
        done
        unset i
        unset pathmunge
fi
# vim:ts=4:sw=4

# 4  
Old 08-23-2010
The commands are being source, but only if the shell is not a login (interactive) shell.

Code:
 if ! shopt -q login_shell ; then # We're not a login shell 
        # Need to redefine pathmunge, it get's undefined at the end of /etc/profile
    pathmunge () {
                if ! echo $PATH | /bin/egrep -q "(^|:)$1($|:)" ; then
                        if [ "$2" = "after" ] ; then
                                PATH=$PATH:$1
                        else
                                PATH=$1:$PATH
                        fi
                fi
        }

        for i in /etc/profile.d/*.sh; do
                if [ -r "$i" ]; then
                        . $i
        fi
        done
        unset i
        unset pathmunge
fi

If you don't have a .profile or .bash_profile in your home directory, create one and add the single line to source the file. If you do have one, most do, edit it to add the command:

Code:
. /etc/profile.d/java.sh

This User Gave Thanks to agama For This Post:
# 5  
Old 08-24-2010
Thanks, that was it!
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Updating variables in a running shell process

Hi I was hoping some one might be able to help me with my problem. I am trying to write a script that will help organize our print server by identifying when a new file has arrived and deleting the older version. I have most of the code written that I need although I still have one small... (2 Replies)
Discussion started by: Paul Walker
2 Replies

2. Shell Programming and Scripting

Updating variables using sed or awk

Hi, I have a file(testfile.txt) that contains list of variables as shown below. T $$FirstName=James $$LastName=Fox $$Dateofbirth=1980-02-04 ……and so on there are 50 different variables. I am writing a script(script1.sh) that will update the above three variable one by one with the values... (6 Replies)
Discussion started by: Saanvi1
6 Replies

3. HP-UX

Environment Variables

Hi All, I need to understand following three environment variables and their usages in HP Unix. _M_ARENA_OPTS _M_CACHE_OPTS PTHREAD_SCOPE_SYSTEM How does these environment variables influence multi threaded applciation and how do we decide the value of these variables? Is there... (0 Replies)
Discussion started by: angshuman
0 Replies

4. HP-UX

Environment Variables

Hi Experts, Need your help in understanding the commands to setup the environment variables in hp-ux. Beleive need to use either set,setenv or export. I am confused between above three options, when to use which option? On command line, I have tried both set and setenv but couldn't... (1 Reply)
Discussion started by: sai_2507
1 Replies

5. Shell Programming and Scripting

Environment variables

I have read tons of posts about how you can't set persisting environment variable in a child script of a shell and have it persist. The only way is to source a file as % . <scriptname> I am finding that true... but I know there is a way around it. I just don't know how. I worked for 6... (5 Replies)
Discussion started by: rwa25
5 Replies

6. UNIX for Dummies Questions & Answers

Environment variables

why are all environment variables represented in a fixed format regardless of the shell you use? like $HOME $PATH etc (6 Replies)
Discussion started by: sravani
6 Replies

7. Shell Programming and Scripting

environment variables

Hi, If i have a variable set and exported in my pofile file will that variable be available in all shell scripts created. Thanks, Radhika. (3 Replies)
Discussion started by: radhika03
3 Replies

8. Programming

environment variables

hi, I want to create a new EV(Environment Variable) through a c program and I done this thing through setenv() method. But the newly created EV is not permanent, i.e. when I exit from the program the EV also no longer lives. But I want to make it a permanent EV for the current user. Actually I... (6 Replies)
Discussion started by: sumsin
6 Replies

9. UNIX for Dummies Questions & Answers

environment variables

Hi Folks, Is it possible somehow to unset all the environment variables which have been defined before in UNIX (Solaris). Thanks, Slava (3 Replies)
Discussion started by: spavlov
3 Replies

10. Programming

environment variables

Hi! How-to get the environment variables in GNU. getenv() only fetches the ones that you can find under export (not the ones under declare)... best regars .David (2 Replies)
Discussion started by: Esaia
2 Replies
Login or Register to Ask a Question