Environment variable

From LQWiki
Jump to navigation Jump to search

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