I've created symlink with absolute path to the directory (Blink) and have for example following tree:$ ls -l /tmp/Atotal 0lrwxrwxrwx 1 root root 6 Apr  3 12:27 Blink -> /tmp/B-rw-r--r-- 1 root root 0 Apr  3 12:27 foo$ ls -l /tmp/Btotal 0-rw-r--r-- 1 root root 0 Apr  3 12:27 barthen I go to /tmp/A and change directory to Blink:$ cd /tmp/A$ pwd/tmp/A$ cd Blink$ pwd/tmp/A/Blinkcd .. returns me to /tmp/Abut if I type for example ls ../foo I'll got error:ls: ../foo: No such file or directorybuiltin cd command resolve path as needed, but external ls consider the .. as up-level of /tmp/B and therefore cannot find foo.What is the problem here?Can I get the foo file from /tmp/A/Blink by relative path like ../foo?
symbolic link to a directory and relative path
bash;shell;directory;symlink;cd command
I don't think you can do this. Shells nowadays keep track of how they got where they are, they keep track of current working directory by name, rather than just relying on file system and OS to keep it. That means the built-in cd can go back up the symbolic link, rather than just following .. chains directly.But when you run ls  ../foo, ls isn't aware that the shell got to a directory by following symbolic links.  ls will do a stat() on ../foo.  The .. part comes from the current directory, which has only a single .. entry for it's parent.  The whole symbolic link thing doesn't change the way directories have a single . and a single .. entry. Symbolic links let the kernel insert an extra layer of indirection into file paths. When you pass ../whatever to open() or stat(), the kernel just uses the current working directory of the process doing the call to figure out which single directory is named by ...