Jak zmienić pwd na rzeczywistą ścieżkę katalogu z dowiązaniem symbolicznym?

83

Oto dość podstawowe pytanie * nix:

Biorąc pod uwagę następujące utworzenie łącza symbolicznego:

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

... z mojego katalogu domowego / home / jvf / , wprowadzenie dowiązania symbolicznego myproject daje mi pwd / home / jfv / myproject / . Teraz chciałbym wejść do katalogu nadrzędnego katalogu, do którego dowiązałem symbolicznie, ale polecenie cd .. przeniesie mnie tylko z powrotem do mojego katalogu domowego / home / jfv / . Czy mimo wszystko można uciec od wprowadzonego przeze mnie śladu dowiązań symbolicznych i zamiast tego mieć pwd równe rzeczywistej ścieżce do katalogu myproject . Oznacza to, że zmieniam pwd z / home / jfv / myproject / na / usr / local / projects / myproject / ?

Dzięki :)

Johan Fredrik Varen
źródło

Odpowiedzi:

142

Po prostu użyj -P(fizycznej) flagi:

pwd -P

cd -P ..
Por
źródło
8

Jeśli wykonasz poniższe czynności, wszystko powinno być w porządku.

1) Najpierw podążaj za swoim linkiem symbolicznym:

[jfv@localhost ~]$ cd myproject

2) Teraz wykonujesz następujące polecenie:

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

3) Teraz możesz sprawdzić swoją lokalizację i zobaczysz, że jesteś w katalogu fizycznym

[jfv@localhost myproject]$ pwd

Wynik będzie następujący:

/usr/local/projects/myproject

Teraz wszystko, co zrobisz, będzie lokalne, a nie w dowiązaniu symbolicznym.

DrupalFever
źródło
3

Programowo zrobiłbyś to za pomocą funkcji biblioteki 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;
}

źródło