Как мне изменить мой pwd на реальный путь к каталогу с символическими ссылками? - PullRequest
75 голосов
/ 19 февраля 2010

Вот довольно простой * nix вопрос:

Учитывая следующее создание символической ссылки:

ln -s /usr/local/projects/myproject/ myproject

... из моего домашнего каталога / home / jvf / ввод символической ссылки myproject дает мне pwd / home / jfv / myproject / .Теперь я хотел бы войти в родительский каталог каталога, на который я ссылался, но команда cd .. вернет меня только в мой домашний каталог / home / jfv / .Есть ли какой-либо способ избежать следа символической ссылки, который я ввел, и вместо этого иметь pwd, равный фактическому пути каталога myproject .То есть, меняя мой pwd с / home / jfv / myproject / на / usr / local / projects / myproject / ?

Спасибо:)

Ответы [ 3 ]

130 голосов
/ 19 февраля 2010

Просто используйте -P (физический) флаг:

pwd -P

cd -P ..
5 голосов
/ 01 июня 2012

Если вы выполните следующее, с вами все будет в порядке.

1) Сначала перейдите по символической ссылке:

[jfv@localhost ~]$ cd myproject

2) Теперь выполните следующую команду:

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

3) Теперь вы можете проверить свое местоположение и увидите, что находитесь в физическом каталоге

[jfv@localhost myproject]$ pwd

Вывод будет следующим:

/usr/local/projects/myproject

Сейчасвсе, что вы делаете, будет локальным, а не по символической ссылке.

3 голосов
/ 19 февраля 2010

Программно вы можете сделать это с помощью функции библиотеки getcwd:

#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;
}
...