Environment variable
An Environment variable is a variable used to give programs information about the environment they are running in, like which display to send output to or the home directory of the current user. For example, take the often-used variable PATH that tells the shell where to look for executables:
$ echo $PATH /sbin:/usr/sbin:/usr/local/sbin:/opt/kde3/sbin:/opt/gnome/sbin:/root/bin:/usr/local/bin:/usr/bin:/usr/X11R6/bin:/bin:/usr/games:/opt/gnome/bin:/opt/kde3/bin:/usr/lib/jvm/jre/bin:/usr/lib/mit/bin:/usr/lib/mit/sbin:/usr/NX/bin:/usr/lib/qt3/bin
You can list the current environment variables in a console like this:
$ env
Set an environment variable
You can set a variable like this:
$ export MYVARIABLE=1000 $ echo "I just defined $MYVARIABLE" I just defined 1000
Note that shell variables may or may not be environment variables. Generally, shell variables that have been exported act as environment variables, but the details may vary depending on the shell.
Environment variables are not global, they are maintained separately per process. A process may change its own, but cannot affect the environment variables of other processes. When a process forks its children inherit the parent's environment variables. That means that you cannot change a variable by calling a program:
$ cat >myscript.sh #!/bin/bash export myvar="this is set" echo $myvar $ sh myscript.sh this is set $ echo $myvar $
In order to set variables from a script, you have to source the script:
$ source myscript.sh this is set $ echo $myvar this is set
Note that sourcing can also be done with a dot:
$ export myvar=empty $ . myscript.sh this is set $ echo $myvar this is set
User-specific variables are set in the $HOME/.bash_profile or $HOME/.bashrc files as these are the files that are sourced when you log in. These variables are available throughout the shell session unless you re-define them with
There are special variables defined when you log in. e.g. $LOGNAME gets set to your login name
$PWD gets set each time you change the directory. e.g.
$ cd /home/joe/mydir $ echo $PWD /home/joe/mydir
Process environments
You can see the environment variables of every process with the command:
cat /proc/12345/environ
Where 12345 is the process' PID.
See also
- Bash
- Scheduling Tasks - how to set aliases and variables at boot time etc.