Shell Environment
A shell maintains an environment that includes a set of variables defined
by the login program, the system initialization file, and
the user initialization files. In addition, some variables are defined by
default. A shell can have two types of variables:
Environment variables - Variables that are exported
to all processes spawned by the shell. Their settings can be seen with the env command. A subset of environment variables, like PATH, affects the behavior of the shell itself.
Shell (local) variables - Variables that affect only
the current shell. In the C shell, a set of these shell variables have a special
relationship to a corresponding set of environment variables. These shell
variables are user, term, home, and path. The value of the environment
variable counterpart is initially used to set the shell variable.
In the C shell, you use the lowercase names with the set
command to set shell variables and use uppercase names with the setenv command to set environment variables. If you set a shell
variable, the shell sets the corresponding environment variable and vice versa.
For example, if you update the path shell variable with
a new path, the shell also updates the PATH environment
variable with the new path.
In the Bourne and Korn shells, you can use the uppercase variable name
equal to some value to set both shell and environment variables. You also
have to use the export command to activate the variables
for any subsequently executed commands.
For all shells, you generally refer to shell and environment variables
by their uppercase names.
In a user initialization file, you can customize a user's shell environment
by changing the values of the predefined variables or by specifying additional
variables. The following table shows how to set environment variables in a
user initialization file.
Table 4-19 Setting Environment Variables in a User Initialization File
Set a User's Environment Variables
for The Shell Type | Line to Add to the User Initialization File |
C shell | setenv VARIABLE value Example: setenv MAIL
/var/mail/ripley |
Bourne or Korn shell | VARIABLE=value; export VARIABLE Example: MAIL=/var/mail/ripley;export
MAIL |
The following table describes environment and shell variables that you
might want to customize in a user initialization file. For more information
about variables that are used by the different shells, see sh(1), ksh(1), or csh(1).
Table 4-20 Shell and Environment Variable Descriptions
Variable | Description |
CDPATH, or cdpath in the C shell | Sets a variable used by the cd command. If the target directory of the cd
command is specified as a relative path name, the cd command
first looks for the target directory in the current directory (".").
If the target is not found, the path names listed in the CDPATH
variable are searched consecutively until the target directory is found and
the directory change is completed. If the target directory is not found, the
current working directory is left unmodified. For example, the CDPATH variable is set to /home/jean, and two directories
exist under /home/jean, bin and rje. If you are in the /home/jean/bin directory
and type cd rje, you change directories to /home/jean/rje, even though you do not specify a full path. |
history | Sets history for the C shell. |
HOME, or home in the C shell | Sets the path to the user's home directory. |
LANG | Sets the locale. |
LOGNAME | Defines the name of the user currently logged in. The default value of LOGNAME is set automatically by the login program to the user name
specified in the passwd file. You should only need to
refer to, not reset, this variable. |
LPDEST | Sets the user's default printer. |
MAIL | Sets the path to the user's mailbox. |
MANPATH | Sets the hierarchies of man pages available. |
PATH, or path
in the C shell | Specifies, in order, the directories
that the shell searches to find the program to run when the user types a command.
If the directory is not in the search path, users must type the complete path
name of a command. The default PATH is automatically
defined and set as specified in .profile (Bourne or Korn
shell) or .cshrc (C shell) as part of the login process. The order of the search
path is important. When identical commands exist in different locations, the
first command found with that name is used. For example, suppose that PATH is defined in Bourne and Korn shell syntax as PATH=/bin:/usr/bin:/usr/sbin:$HOME/bin and a file named sample resides in both /usr/bin and /home/jean/bin. If the user types
the command sample without specifying its full path name,
the version found in /usr/bin is used. |
prompt | Defines
the shell prompt for the C shell. |
PS1 | Defines the shell prompt for the Bourne or Korn shell. |
SHELL, or shell
in the C shell | Sets the default shell used by make, vi,
and other tools. |
TERMINFO | Specifies the path name for an unsupported terminal that has been added to
the terminfo file. Use the TERMINFO
variable in /etc/profile or /etc/.login. When the TERMINFO environment
variable is set, the system first checks the TERMINFO path
defined by the user. If it does not find a definition for a terminal in the TERMINFO directory defined by the user, it searches the default
directory, /usr/share/lib/terminfo, for a definition.
If the system does not find a definition in either location, the terminal
is identified as "dumb." |
TERM, or term
in the C shell | Defines the terminal. This variable should be reset in /etc/profile or /etc/.login. When the user
invokes an editor, the system looks for a file with the same name as the definition
of this environment variable. The system searches the directory referenced
by TERMINFO to determine the terminal characteristics. |
TZ | Sets the time zone, which is used to display dates, for
example, in the ls -l command. If TZ
is not set in the user's environment, the system setting is used. Otherwise,
Greenwich Mean Time is used. |
The PATH Variable
When the user executes a command by using the full path, the shell uses
that path to find the command. However, when users specify only a command
name, the shell searches the directories for the command in the order specified
by the PATH variable. If the command is found in one of
the directories, the shell executes the command.
A default path is set by the system, but most users modify it to add
other command directories. Many user problems related to setting up the environment
and accessing the right version of a command or a tool can be traced to incorrectly
defined paths.
Setting Path Guidelines
Here are some guidelines for setting up efficient PATH
variables:
If security is not a concern, put the current working directory
(.) first in the path. However, including the current working directory in
the path poses a security risk that you might want to avoid, especially for
superuser.
Keep the search path as short as possible. The shell searches
each directory in the path. If a command is not found, long searches can slow
down system performance.
The search path is read from left to right, so you should
put directories for commonly used commands at the beginning of the path.
Make sure directories are not duplicated in the path.
Avoid searching large directories, if possible. Put large
directories at the end of the path.
Put local directories before NFS mounted
directories to lessen the chance of "hanging" when the NFS server
does not respond and to reduce unnecessary network traffic.
Examples--Setting a User's Default Path
The following examples show how to set a user's default path to include
the home directory and other NFS mounted directories. The current working
directory is specified first in the path. In a C-shell user initialization
file, you would add the following:
set path=(. /usr/bin $HOME/bin /net/glrr/files1/bin)
|
In a Bourne- or Korn-shell user initialization file, you would add the
following:
PATH=.:/usr/bin:/$HOME/bin:/net/glrr/files1/bin
export PATH
|
Locale Variables
The LANG and LC environment variables
specify the locale-specific conversions and conventions for the shell, like
time zones, collation orders, and formats of dates, time, currency, and numbers.
In addition, you can use the stty command in a user initialization
file to set whether the terminal session will support multibyte characters.
LANG sets all possible conversions and conventions
for the given locale. If you have special needs, you can set various aspects
of localization separately through these LC variables: LC_COLLATE, LC_CTYPE, LC_MESSAGES, LC_NUMERIC, LC_MONETARY, and LC_TIME.
The following table describes some of the values for the LANG and LC environment variables.
Table 4-21 Values for LANG and LC Variables
Value | Locale |
de_DE.ISO8859-1 | German |
en_US.UTF-8 | American English (UTF-8) |
es_ES.ISO8859-1 | Spanish |
fr_FR.ISO8859-1 | French |
it_IT.ISO8859-1 | Italian |
ja_JP.eucJP | Japanese (EUC) |
ko_KR.EUC | Korean (EUC) |
sv_SE.ISO8859-1 | Swedish |
zh_CN.EUC | Simplified Chinese
(EUC) |
zh_TW.EUC | Traditional Chinese (EUC) |
For more information on supported locales, see the International
Language Environments Guide.
Examples--Setting the Locale Using the LANG
Variables
The following examples show how to set the locale by using the LANG environment variables. In a C-shell user initialization file,
you would add the following:
setenv LANG de_DE.ISO8859-1
|
In a Bourne- or Korn-shell user initialization file, you would add the
following:
LANG=de_DE.ISO8859-1; export LANG
|
Default File Permissions (umask)
When you create a file or directory, the default file permissions assigned
to the file or directory are controlled by the user mask.
The user mask is set by the umask command in a user initialization
file. You can display the current value of the user mask by typing umask and pressing Return.
The user mask contains the following octal values:
The first digit sets permissions for the user
The second sets permissions for group
The third sets permissions for other, also referred to as "world"
Note that if the first digit is zero, it is not displayed. For example,
if umask is set to 022, 22 is displayed.
To determine the umask value you want to set, subtract
the value of the permissions you want from 666 (for a file) or 777 (for a
directory). The remainder is the value to use with the umask
command. For example, suppose you want to change the default mode for files
to 644 (rw-r--r--). The difference between 666 and 644
is 022, which is the value you would use as an argument to the umask command.
|