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

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

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

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

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

спасибо :)

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