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.

3
  • 1
    You mean cd ~/a/really/long/path then cd .. puts you in ~ at the moment? I can't reproduce that. Commented Apr 11, 2011 at 5: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). Commented Apr 11, 2011 at 5:50
  • Is my edit accurate? I couldn't understand the question before. Commented Apr 11, 2011 at 6:28

3 Answers 3

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).

3
  • 1
    The way I read the question, the OP has -P or -o physical already set? Commented Apr 11, 2011 at 5:14
  • @Mikel: No, the question says that he is following the symbolic link, not the physical directory structure. Commented Apr 11, 2011 at 8:02
  • Sorry, I didn't actually try to edit your post. Suggested edit submitted now. Commented Apr 11, 2011 at 10:00
4

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

cd $(readlink -f .)/..
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

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.