The C shell, and some other shells too, keep their own idea of what your current directory is. The 
csh
 will give you the current directory's absolute pathname in 
$cwd
; 
bash
 uses 
$PWD
. But sometimes this can give you the wrong pathname.
Why?
 Because the 
cwd
 variable was added before many versions of UNIX had  
symlinks (
18.4
)
 (symbolic links). As article 
18.7
 explains, symlinks can point to directories any place else on the filesystem or even (for some UNIXes) directories on another computer. Poor 
cwd
 couldn't cope: it assumed that the current directory was the name of the symlink itself (instead of the directory that the link points to). That led to problems like the one below: 
cd
ing to a "directory" named 
wpa
 that's actually a symlink to 
/work/pwrtools/articles
. The value of 
$cwd
, shown in the prompt, is wrong. The 
/bin/pwd
 command 
shows the real current directory (
14.4
)
 (you should type all of 
/bin/pwd
 because some shells and users have plain 
pwd
 aliased to do 
echo
 
$cwd
):
/home/jerry%pwd/home/jerry%ls -l wpalrwxrwxrwx 1 jerry 23 Sep 8 13:55 wpa -> /work/pwrtools/articles /home/jerry%cd wpa/home/jerry/wpa%/bin/pwd/work/pwrtools/articles /home/jerry/wpa%
By now, a lot of C shells have a variable named hardpaths ; the bash variable is nolinks . If you set the shell variable (usually in your shell setup file ( 2.2 ) ), the shell won't be fooled by symlinks. Watch:
/home/jerry/wpa%cd/home/jerry%set hardpaths(on bash,nolinks=1 ) /home/jerry%cd wpa/work/pwrtools/articles%
Setting 
hardpaths
 or 
nolinks
 makes the shell do extra work, so don't bother with it unless you use 
$cwd
.
The dirs ( 14.6 ) command has the same problem. Setting hardpaths or nolinks helps there, too.
If your system has symlinks but your shell doesn't recognize a variable like hardpaths , here are workarounds for the .cshrc file:
alias setprompt 'set prompt="${cwd}% "' alias cd        'chdir \!* && set cwd=`/bin/pwd` && setprompt' alias pushd     'pushd \!* && cd .' alias popd      'popd \!* && cd .'
When you 
cd
, that alias resets the 
cwd
 variable to the output of 
/bin/pwd
, then resets the prompt to the new 
cwd
. Using 
pushd
 or 
popd
 (
14.6
)
 runs the 
cd
 alias, too - this changes to the current directory (
.
), which fixes 
cwd
 (as well as the 
dirs
 command) and resets the prompt.
Whew. Are symlinks worth the work? (I think they are.)
-
 
 | 
 
 | 
 
 | 
| 14.12 Marking Your Place with a Shell Variable | 
 
 | 
14.14 Automatic Setup When You Enter/Exit a Directory |