I am trying to understand how classpath really works. After searching around the web this is where I have reached so far:
I have added
export CLASSPATH="/home/foo:/home/foo/Java_code/my_code"
at /etc/environment
. I am running Ubuntu by the way.
Java finds the path and compiles without problem.
The problem is that if I change the CLASSPATH and then I do: source /etc/environment
, the new CLASSPATH is not applied. It is applied if and only if I restart the system. For example if I delete the
export CLASSPATH="/home/foo:/home/foo/Java_code/my_code"
line, then I do source /etc/environment and I finally do echo $CLASSPATH
, what I get is /home/foo:/home/foo/Java_code/my_code
. I think I should get an empty line, shouldn't I?
Is there a way to apply the changes in PATH or CLASSPATH variables immediately without having to restart the system?
It might help you know that the /etc/environment file originally contained only the following line:
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
Thank you for your time.
I think you should not put any paths that a local to your home directory in a system wide file. I would leave /etc/environment
well alone, unless you provide some changes, that are necessary or beneficial to all users. Put any changes to the CLASSPATH in your .bashrc
in your home directory.
CLASSPATH=$CLASSPATH:/home/foo:/home/foo/Java_code/my_code
export CLASSPATH
This way you can source it and any newly started bash will have the settings right at once.
export CLASSPATH=""
or better
unset CLASSPATH
will delete an existing Classpath. There are multiple locations where you can set or unset the classpath - a missing entry will not unset it.
When you remove
export CLASSPATH="/home/foo:/home/foo/Java_code/my_code"
line and then source ...
it wouldn't remove the CLASSPATH because it has already been set. It doesn't clear the variables which have already been defined.
The /etc/environment
file is not a normal shell script; it is not executed as a shell script when you boot or login into your system. So running it with source /etc/environment
does not the same as when you normally boot your system.
See: Ubuntu environment variables
/etc/environment
- This file is specifically meant for system-wide environment variable settings. It is not a script file , but rather consists of assignment expressions, one per line. Specifically, this file stores the system-wide locale and path settings.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.