How do I change my pwd to the real path of a symlinked directory? How do I change my pwd to the real path of a symlinked directory? linux linux

How do I change my pwd to the real path of a symlinked directory?


Just use -P (physical) flag:

pwd -Pcd -P ..


If you do the following you should be OK.

1) First you follow your symlink:

[jfv@localhost ~]$ cd myproject

2) Now you execute the following command:

[jfv@localhost myproject]$ cd -P ./

3) Now, you can check your location and you will see that you are on the physical directory

[jfv@localhost myproject]$ pwd

The output will be as follows:

/usr/local/projects/myproject

Now, everything you do will be local and not on the symlink.


Programmatically, you would do this with the getcwd library function:

#include <unistd.h>#include <stdio.h>int main(int argc, char **argv){    char buf[1024*1024L];    char *cwd;    cwd = getcwd(buf, sizeof buf);    if (cwd == NULL) {        perror("getcwd");        return 1;    }    printf("%s\n", cwd);    return 0;}