Thomas Shaw - Oracle Corp wrote: > Not sure if this is a bug but logging anyway just in case.
Thank you for the report. However what you are describing is expected behavior. It isn't a bug. It is just the way that symbolic links work. > Symlink path is not followed as expected. For example: Bash and other shells that know about symlinks (optionally) handle them by keeping track of a logical path in the PWD environment variable. This is a logical path and not the actual physical path. > bash-3.00# pwd > /ee/oce > bash-3.00# ls -l oracle > lrwxrwxrwx 1 oracle oinstall 6 Oct 12 12:03 oracle -> ../oce You have created an alias where a single path may be referred to by multiple different names. You have also created a loop. > bash-3.00# cd oracle > bash-3.00# pwd > /ee/oce/oracle Bash followed "how you got there" so that 'cd ..' will work to get you back to where you were when you went into it. The 'pwd' is a shell builtin and returns this logical path. Use 'pwd -P' to get the physical path. > bash-3.00# cd oracle > bash-3.00# pwd > /ee/oce/oracle/oracle And so on. But 'cd ..' will take you back to the last place that you were when you went in. > bash-3.00# pwd > /ee/oce/oracle/oracle/oracle/oracle > bash-3.00# sh > # pwd > /export/home/database/11g/oce Your 'sh' is looking at the physical path, not the logical path. The physical path is the canonical location. > # cd /ee/oce > # ls -l oracle > lrwxrwxrwx 1 oracle oinstall 6 Oct 12 12:03 oracle -> ../oce > # cd oracle > # pwd > /export/home/database/11g/oce > # cd oracle > # pwd > /export/home/database/11g/oce That 'sh' is using physical paths. > * A fix for the bug if you have one! What you are describing is the way it is supposed to work. Symbolic links were developed in BSD and a wonderful invention they have proved to be. But they are not entirely consistent throughout. They do not change the behavior of the filesystem. They are simply a symbolic name translation for that individual target. The logical path used to get to someplace isn't canonical. There may be multiple logical paths that point to a location. You can only cache the logical value. If the physical path changes out from under the cached value then they will be out of sync and there isn't any way to avoid it. This is a user configurable setting. If you want canonical paths that are always correct you should use physical paths. The ~/.bashrc file would be an appropriate place to place that setting. set -o physical Bob