103

I have my code mounted as an sshfs in my home directory, but the hierarchy is difficult to remember, so I created a symlink in my home directory leading to that directory. Is there a way so that when I cd to that symbolic link, instead of cding to the symbolic link, it will actually cd to that directory?

If the question was unclear, here is an example of what I am looking for:

foo@foo:~$ ls -l
lrwxrwxrwx  1 foo      foo              5 2012-11-14 08:20 foo -> bar/bar

foo@foo:~$ cd foo
foo@foo:~/bar/bar/$
1

1 Answer 1

147

With any POSIX implementation of cd, you can use the -P option to do this.

$ help cd
...
    -P      use the physical directory structure without following symbolic links
...

You can see it in action here:

$ mkdir foo
$ ln -s foo bar
$ cd -P bar
$ pwd
/tmp/tmp.WkupF2Ucuh/foo

If you want this to be the default behaviour, you can either create an alias for cd, like so:

alias cd='cd -P'

...or use set -o physical. For tcsh, the equivalent command is set symlinks=chase.

3
  • 1
    And if you don't have a Posix implementation...?
    – SMBiggs
    Commented May 18, 2019 at 1:53
  • 3
    You do have a POSIX implementation. POSIX is a standard base, somethings are added on top or changed a bit, "With any POSIX implementation" means this will work almost anywhere, i.e. its not something bash or ksh specific.
    – teknopaul
    Commented Jan 29, 2020 at 10:21
  • zsh note: set CHASELINKS is equivalent to set -o physical (which I believe is for backward compatibilty with bash). Commented Jan 4, 2023 at 23:03

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .