section   next section   upper level

Section 11: The Execution Environment

CONCEPT: The exact behavior of commands issued in the shell depends upon the execution environment provided by the shell.

The UNIX shell maintains a set of environment variables that are used to provide information, like the current working directory, and the type of terminal being used, to the programs you run. The environment variables are passed to all programs that are not built in to the shell, and may be consulted, or modified, by the program. By convention, environment variables are given in upper case letters.

To view all the environment variables, use the command

You can also view a particular environment variable using the echo command:
echo $TERM
The above command echos the value of the TERM environment variable to the standard output.

The creation of the execution environment

When you log in, a sequence of events establishes the execution environment. The exact sequence of events depends on the particular flavor of UNIX, and also depends upon the default shell for your account. The following is a description of the login process for the HP-UX operating system. Other operating systems may differ.

The getty process
The getty process provides the login: prompt that you see on the terminal screen. The getty process reads your username, and invokes the login program.

The login program
The login program receives the username from getty, and prompts you for your password. Login then consults the system database /etc/passwd to verify your password. (Note that login will request your password even if there is no entry in /etc/passwd for the username you've given. That prevents someone from finding valid usernames by trial and error.) Login turns off terminal echo so that your password is not displayed on the screen.

Having verified your password, login then uses information in /etc/passwd to invoke your default shell. If no default shell is specified in the /etc/passwd entry, login starts the Bourne shell (/bin/sh).

Shell startup: System login scripts
When the shell program starts, it reads configuration files called login scripts to configure the execution environment. On HP-UX, the file /etc/profile provides initialization parameters for ksh and sh, while the file /etc/csh.login is used for csh. After the system login scripts are read, the shell looks for user-specified login scripts.

Shell startup: User login scripts
After the system login scripts are read, the shell reads user login scripts. User login scripts are kept in one's home directory, and are the means by which one can customize the shell environment. Sh and ksh look for a file called .profile. Ksh also reads a file defined in the environment variable ENV. Csh reads a file called .cshrc, and (if it is the login shell), the file .login.

Important environment variables

Here are descriptions of some of the most important environment variables, and examples of how some variables can affect the execution of commands.

The TERM environment variable defines the type of terminal that you are using. Most UNIX systems have a database of terminal types, and the capabilities of each terminal type.

The PATH variable contains the names of directories to be searched for programs that correspond to command names. When you issue a command to the shell, the shell searches sequentially through each directory in the PATH list until it finds an executable program with the command name you typed.

The USER variable contains your username. Any time you access a file or directory, the access permissions are checked against the value of USER.

The HOME variable contains the name of your home directory. When you issue the cd command with no directory argument, you will be placed in the directory defined in the HOME environment variable. The HOME variable is also where the shell will look for the user login scripts.

The MAIL variable contains the name of the directory where your incoming mail is stored. When you start a mail program, the program will look in the directory stored in the MAIL environment variable for your incoming mail messages.

The EDITOR variable is used by programs that must invoke a text editor to provide the ability to edit or compose documents. One example is the elm program, which is used to read and send electronic mail. If you elect to compose a new mail message while in elm, the elm program will check the contents of the EDITOR variable to determine which editor to invoke.

The HOST environment variable contains the name of the host machine that is running your shell program. When you connect to a remote host through telnet or ftp, the name of your host is relayed to the remote machine, so the administrators of the remote machine can keep track of who is connecting, and from where.

Setting environment and shell variables

The exact mechanism for setting the environment and shell variables depends upon the type of shell you're using.

sh, or ksh
To set an environment variable in sh or ksh, use the syntax VAR=value;export VAR, where VAR is the name of the environment variable and value is the value you wish to assign. Do not put spaces on either side of the equals sign. The export command instructs the shell to propagate the value of the variable to all programs that are run by the shell. If an environment variable is reset, but not exported, the change will only apply to the shell itself. To set the EDITOR variable to the value emacs in ksh or sh, use the command:

EDITOR=emacs;export EDITOR

It is also possible to unset environment variables, with the unset command. Unsetting an environment variable removes the definition of the variable.

To set an environment variable in csh, use the setenv command. The command has the syntax: setenv VARIABLE value. To set the EDITOR variable to the value emacs in csh, use the command:

setenv EDITOR emacs

For more information about the shell environment, consult the manual page for the shell you're using.

section   next section   upper level