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

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

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

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

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

Спасибо:)

Ответ 1

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

pwd -P

cd -P ..

Ответ 2

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

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

[[email protected] ~]$ cd myproject

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

[[email protected] myproject]$ cd -P ./

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

[[email protected] myproject]$ pwd

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

/usr/local/projects/myproject

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

Ответ 3

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