33

I have a symlink

~/link -> ~/a/really/long/path

When I do

cd ~/link
cd ..    

it takes me to

~

but I want to go to

~/a/really/long

Is there a way to do this?

I am using bash.

Mikel
  • 57,299
  • 15
  • 134
  • 153
Xodarap
  • 3,683
  • 1
    You mean cd ~/a/really/long/path then cd .. puts you in ~ at the moment? I can't reproduce that. – Mikel Apr 11 '11 at 05:13
  • 2
    @Mikel: No, first create a symlink to ~/a/really/long/path then cd to that then to ... You should end up back in ~ (assuming that's where you started). – Xodarap Apr 11 '11 at 05:50
  • Is my edit accurate? I couldn't understand the question before. – Mikel Apr 11 '11 at 06:28

3 Answers3

41

Bash (as well as ksh, zsh, and even ash) track directory changes so that cd /foo/bar && cd .. always takes you to /foo even if bar is a symlink. Pass the -P option to cd to ignore the tracked change and follow the “physical” directory structure:

cd -P ..

See help cd or man builtins for documentation about the bash builtin cd. If you really dislike the directory tracking feature, you can turn it off with set -P in bash (set -o no_chase_link in zsh).

Faheem Mitha
  • 35,108
4

You can also use readlink to find the physical path to this directory, then go one directory higher:

cd $(readlink -f .)/..
dhasenan
  • 161
3

One method you could use is to use an alias instead of a symlink to take you to ~/a/really/long/path. That's the method I use, since then I can just type a simple 1/2/et cetera letter command instead of cd symlink

Wipqozn
  • 141