54

Say I do the following:

cd /some/path
ln -s /target/path symbolic_name

If then do:

cd /some/path
cd symbolic_name
pwd

I get:

/some/path/symblic_name

and not:

/target/path

Is there a way to have the shell "fully resolve" a symbolic link (i.e. updating CWD, etc.), as if I had directly done:

cd /target/path

?

I need to run some programs that seem to be "aware" or "sensitive" about how I get to my target path, and I would like them to think that I arrived to the target path as if had done cd /target/path directly.

Amelio Vazquez-Reina
  • 40,169
  • 77
  • 197
  • 294
  • 9
    Related to [this question](http://unix.stackexchange.com/questions/55713/make-cd-follow-symbolic-links). You can do `pwd -P` or `alias pwd='pwd -P'` also `cd -P` to go to the physical path instead of the symlink. – lmcanavals Feb 03 '13 at 22:25
  • @MartínCanaval Thanks; that's what I was looking for! – Ryan Oct 24 '19 at 17:11

2 Answers2

74

Your shell has a builtin pwd, which tries to be "smart". After you did a cd to a symlink the internal pwd fakes the output as if you moved to a real directory.

Pass the -P option to pwd, i.e. run pwd -P. The -P option (for “physical”) tells pwd not to do any symbolic link tracking and display the “real” path to the directory.

Alternatively, there should also be a real binary pwd, which does not do (and is even not able to do) this kind of magic. Just use that binary explicity:

$ type -a pwd
pwd is a shell builtin
pwd is /bin/pwd
$ mkdir a
$ ln -s a b
$ cd b
$ pwd
/home/michas/b
$ /bin/pwd
/home/michas/a
Gilles 'SO- stop being evil'
  • 807,993
  • 194
  • 1,674
  • 2,175
michas
  • 21,190
  • 4
  • 63
  • 93
20

Try cd -P <symlink_dirname>.

tim@ls:~$ mkdir a
tim@ls:~$ ln -s a b

tim@ls:~$ cd b
tim@ls:~/b$ pwd
/home/tim/b

tim@ls:~/b$ cd ..
tim@ls:~$ cd -P b
tim@ls:~/a$ pwd
/home/tim/a

You can also use set -o physical to make this behavior persist through the lifetime of the running shell.

Check out https://stackoverflow.com/questions/10456784/behavior-of-cd-bash-on-symbolic-links for some more good info.

livingstaccato
  • 835
  • 7
  • 18