Author: Joe Barr
env
at the command prompt and press Enter.
Here’s what the first few lines of mine looks like:
LESSKEY=/etc/lesskey.bin NNTPSERVER=news INFODIR=/usr/local/info:/usr/share/info:/usr/info MANPATH=/usr/local/man:/usr/share/man:/usr/X11R6/man:/opt/gnome/share/man SSH_AGENT_PID=6004 HOSTNAME=linux DM_CONTROL=/var/run/xdmctl GNOME2_PATH=/usr/local:/opt/gnome:/usr XKEYSYMDB=/usr/X11R6/lib/X11/XKeysymDB DESKTOP_STARTUP_ID= HOST=linux
Browsing through the output of the naked env
command, you can spot all sorts of important items: various paths are defined, the locations of man pages provided, the system host name is given, terminal program is specified, the name of the shell to be run, and much more.
Remember PS1? The CLI prompt definition we mod’ed and colorized recently? It’s there. So is your USER name, and your EDITOR, and the HISTSIZE, which controls how many lines of command history will be available to you to scroll back through. My environment contains 79 different variables.
The env
command also allows you to define, set the value for, or remove variables from the environment, prior to execution of a command. But it’s only a temporary addition, change, or removal. Let’s play with that a bit. We’ll create a new variable called FUNNYNAME and set it to mister.hawg:
warthawg@linux:~> env FUNNYNAME=mister.hawg;env | grep FUNNY FUNNYNAME=mister.hawg
If I immediately repeat the naked env
with the pipe to grep
, FUNNYNAME has disappeared. I refer you to the man for additional info on the env
command.
You can also get a list of shell variables using the set
command. A bare set
entered at the command prompt will produce a list of all existing shell variables sorted by variable name. This can make finding a particular variable a much easier chore. Otherwise, it looks just the same as the output from env
. The first few lines on my system look like this:
ACLOCAL_FLAGS='-I /opt/gnome/share/aclocal' BASH=/usr/local/bin/bash BASH_VERSINFO=([0]="3" [1]="00" [2]="0" [3]="1" [4]="release" [5]="i586-suse-linux") BASH_VERSION='3.00.0(1)-release' COLORTERM=gnome-terminal COLUMNS=105 CPU=i686 DESKTOP_LAUNCH=gnome-open DESKTOP_SESSION=gnome
So what if you want to make the change “stick” for longer than a single moment? Easy. Use the export
command. Let’s change the value of FUNNYNAME to something else, like this:
export FUNNYNAME=w.hawg
Now when I feed grep
the output of env
looking for something FUNNY, I get:
FUNNYNAME=w.hawg
Of course, the real reason for having these variables in the first place is to make the information available to processes running on your system. A script or command can produce the value of a variable simply by putting a $ character in front of its name. Let’s replace the grep
above with something a little more elegant. How about this?
echo $FUNNYNAME w.hawg
The change in the environment of the export command entered at the CLI above will remain in effect until it is changed again or the session ends, whichever comes first. The environment variables are loaded when the shell is opened, so if you want the change to be permanent you need to take another approach.
I’m using SUSE 9.2, so I can place any environment mods I want to make in the .bashrc file in my home directory. That’s because SUSE sources your $HOME/.bashrc in /etc/profile. Your milage may vary. The distribution you’re running might not source the .bashrc file, or it might favor your .profile file (also on the home directory) instead. Naturally, the files in a home directory apply only to that user. If you want to make an environment change for all users on the system — like admins often do — you would make them in /etc/profile instead of in either file in the home directory.
Wherever you decide to place the commands, you can do it as shown above with the value being provided as an argument to the export
command, or you can split it up, assigning the value on one line and exporting it on a following line, like this:
FUNNYNAME=mister.hawg export FUNNYNAME
One last item — the unset
command. Using it, you can make the variable simply disappear from the environment:
unset FUNNYNAME
OK, there you have it. Refer to the man pages for the env
, set
, unset
, and export
commands to go deeper into the subject. And be sure to bring up your adventures in the Bash shell environment the next time you’re in the company of Windows users of the opposite gender. They’re impressed by that kind of talk.