83

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/$
120

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.

| improve this answer | |
  • 1
    And if you don't have a Posix implementation...? – SMBiggs May 18 '19 at 1:53
  • 1
    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 Jan 29 at 10:21

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.