Environment variable
An environment variable holds information in your shell session. 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
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.
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
- Shell Skripting Tutorial
- Bash
- Scheduling Tasks - how to set aliases and variables at boot time etc.