Как изменить pwd на реальный путь к символическому каталогу?


вот довольно элементарный вопрос * nix:

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

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

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

спасибо :)

3 69

3 ответа:

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

pwd -P

cd -P ..

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

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

[jfv@localhost ~]$ cd myproject

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

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

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

[jfv@localhost myproject]$ pwd

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

/usr/local/projects/myproject

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

программно это можно сделать с помощью функции библиотеки 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;
}