- Finding Configuration Files
- Configuring Your Shell
- Environment Variables
- Changing your PATH
- Shell Aliases
- Shell Settings
- Configuring vi
Environment Variables
In the configuration files for your shell, you will most commonly change the contents of various environment variables.
A variable is simply a piece of memory with a name. When the variable is used, the contents stored in memory are substituted for the name.
Usually when a program stores something in a variable, the stored information is not available to any other program. Environment variables are an exception to this.
Environment variables in Unix not only are available to the process that set them, but are also passed to any child processes at the moment the child process is created. (Review Chapter 2, "Using the Command Line," for an explanation of processes.) So if you set an environment variable in your shell, then any command you run from that shell will be able to read the contents of that variable. And any processes created by the child will also "inherit" all the environment variables that were set when it was created (Figure 7.3). Note that shell variables, such as the prompt (which determines your shell prompt), are not passed to children.
Figure 7.3 Illustration of how environment variables set by parent processes are passed to child processes.
Many programs use this ability to read information provided by their parents and to con-figure their behaviorthink of it as programs adapting to their environment.
When your shell starts up, it automatically sets a number of environment variables. You can create more and alter the ones that have already been set. By convention, the names of environment variables are capitalized, as in PATH. When you want to obtain the value that is stored in a variable, you add a $ to it. Adding the $ to the variable name tells the shell that the value stored in the PATH variable should be substituted at that point, as in $PATH.
Table 7.3 Common Environment Variables
Variable |
Meaning |
HOME |
Full path of home directory. |
SHELL |
Full path of log-in shell. |
USER |
User name (a.k.a. "short name" in Mac OS X). |
PATH |
List of directories containing commands. |
LOGNAME |
Same as USER. |
PWD |
Full path of present working directory. |
MANPATH |
List of directories containing man pages. |
VISUAL |
Name of editor (such as vi, emacs) to be used when another program wants you to edit a file. |
To see all your environment variables:
Env
The env command will show you all of the environment variables that are currently set (Figure 7.4). For an explanation of common variables, see Table 7.3. Some of the environment variables contain information that is very short and easy to read (such as SHELL, HOME, and USER), while others, like the TERMCAP variable, have long values filled with complicated settings (TERMCAP is short for terminal capabilities; programs like the man command read it to determine how to handle various display tasks, such as showing bold or underlined characters). The env command is actually a good example of a child's inheriting its environment from its parent. When you run the env command, your shell is the parent process that "spawns" a child process to run env. When env runs, it inherits its parent's environment and then reads and displays its own environment.
Figure 7.4 The command env shows all of the current environment variables.
TIP
The tcsh shell also has the setenv command, which is normally used to set an environment variable (see next task). If used with no arguments, setenv produces a neatly formatted list of all your environment variables.
You should leave most environment variables alonethey are set automatically to their correct values. For example, the USER variable has your user name, and changing it will simply confuse any program that tries to use it to determine which user you are.
Sometimes you will want to change environment variables, though; for example, the crontab program (used to schedule automatic execution of commands, discussed in Chapter 11, "Introduction to System Administration") reads the VISUAL environment variable to decide which editor to launch.
Setting environment variables is simple.
To temporarily change or create an environment variable in tcsh (or csh):
setenv VISUAL vi
This sets the environment variable named VISUAL to have the value vi.
Test that it worked:
echo $VISUAL
Figure 7.5 shows the result.
Figure 7.5 Setting an environment variable in the tcsh or csh shell.
Tips
If the value contains spaces, make sure to enclose it in quotes:
setenv ORGANIZATION "Tony's Pizza"
To reset (or unset, in Unix terminology) an environment variable, simply leave off the value:
setenv VISUAL
Environment variables that are set at a shell prompt will last only for as long as you use the current shell in each session. That is, the setting disappears when you log out.
To make a durable change to an environment variable in the tcsh shell:
Edit your ~/.tcshrc file (or type ~/.cshrc for the csh shell).
Add this line to the end of the file:
setenv ORGANIZATION "Tony's Pizza"
Save the file.
Quit the editor.
The change will take effect with the next shell you start.
Open a new Terminal window.
Test that the variable is set:
echo $ORGANIZATION
Tips
A faster way to add a single line to a file is to use the output redirection you learned in Chapter 2, "Using the Command Line." Replace steps 14 above with echo setenv ORGANIZATION \"Tony\'s →Pizza\" >> ~/.tcshrc
Make sure to use >> and not a single > character. If you use only >, you will wipe out the current contents of your .tcshrc file.
Notice how you have to escape the quotes by preceding them with backslashes so that the shell itself doesn't try to interpret them. You want the quotes to be part of the arguments to the echo command so that they end up in the ~/.tcshrc file.
Different shells use different syntax to set environment variables.
To change or create an environment variable in bash (or sh):
export VISUAL=vi
Make sure there are no spaces on either side of the equal sign.
The export command brings variables into the environment. The command line above actually combines two operations: the setting of the VISUAL variable (VISUAL=vi) and the exporting of that variable into the shell's list of environment variables. The same result could be achieved in two separate steps:
VISUAL=vi export VISUAL
Without the export step, the VISUAL variable would be set, but only as a shell variable, which is a variable that the shell can read but that will not be passed on to any child processes it creates.
Test the setting with echo $VISUAL (Figure 7.6).
Figure 7.6 Setting an environment variable in the bash or sh shell.
Tips
If you want the setting to be made each time you start a shell, put the export command line in your ~/.profile file.
As with the tcsh shell, you use quotes if the value has spaces in it:
export ORGANIZATION="Tony's Pizza"