To change the "default" search path used every time you log in,
edit the
PATH=...
line in your
.profile
file
or the
set
path=(...)
line in your
.cshrc
or
.login
file.
Add the
absolute pathname (
14.2
)
of the directory to the path.
You have a choice:
-
You can put the directory at the end of your path.
(I think that's the best idea unless you know exactly what you're doing.)
Then, commands in the directories you add will be used only if they have
unique
names
that aren't found anywhere else in the path.
You can check that with a command like
which
(
50.8
)
.
-
If you put the pathname close to the start of the path, before
standard system directories
like
/bin
, then commands in the directory you add
will be used instead of system commands with the same name.
That lets you replace commands that don't work the way
you want with your own version.
For instance, if you had the
cal
script that marks today's date (
48.7
)
in
your
bin
(
4.2
)
,
it would be used instead of the
system
cal
(
48.6
)
.
If you set your path this way, you should
be especially careful not to
accidentally give some random program the same name as a system command - article
44.21
explains how to check for that.
Also, be sure to make the directory unwritable by other users
(with
chmod go-w
)-so they can't add malicious programs with
the same names as system utilities.
CAUTION:
Installing your own version of standard system commands (like
ls
or
rm
) at the front of your path has a serious consequence.
Many system programs and shell scripts will call a program like
ls
and expect it to work just like the default system version of that program.
If you install a version at the front of your search path that behaves
differently, that can cause serious problems for an unsuspecting program.
For example, you might install a version of
rm
that writes messages
to standard output like "Do you want to remove this file?" and reads
your answer from standard input.
The standard system
rm
command won't prompt if its standard input
isn't a terminal.
If your custom
rm
doesn't work the same way as the system
rm
,
other programs that call
rm
can mysteriously lock up while
they wait (forever) for your private
rm
to get an answer to its prompt.
If you want to replace a system command, it's better to give your
version a different name.
When you log in, as your shell starts, before your setup files are read,
your system probably has already set a default search path for you.
Your system administrator can change that path.
If your system has a default path, you should think about using it as part of
your path - ask your administrator.
To do that, include the variable
$PATH
or
$path
as you set
your path.
For example, to add your
bin
directory at the end of the system
path, use one of the following lines:
[4]
set path=($path ~/bin)
C shell
PATH=$PATH:$HOME/bin
Bourne shell
For Bourne-type shells, load the updated
PATH
by typing a command like:
$
. .profile
For the C shell, type one of these commands, depending on which file you changed:
%
source .cshrc
%
source .login
As you work, you might need to add a directory to your path temporarily.
For example, when I develop new versions of existing programs, I put them
in a separate directory named something like
alpha-test
.
I don't usually want to run the alpha-test commands - but when I do, I
add the
alpha-test
directory to the front of my path temporarily.
(It's handy to set the new path in a
subshell (
38.4
)
so it won't change the path in my other shell.)
Use the same path setting command you'd use in a shell setup file:
%
set path=(~/xxx/alpha-test $path)
C shell
$
PATH=$HOME/xxx/alpha-test:$PATH
Bourne shell
$
export PATH
Article
8.8
shows another way to change your path:
command-by-command instead of directory-by-directory.