Wie ändere ich mein pwd in den realen Pfad eines verknüpften Verzeichnisses?

82

Hier ist eine ziemlich elementare * nix Frage:

Bei folgender Symlink-Erstellung:

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

... aus meinem Home-Verzeichnis / home / jvf / gibt mir die Eingabe des myproject-Symlinks ein pwd / home / jfv / myproject / . Jetzt möchte ich das übergeordnete Verzeichnis des Verzeichnisses eingeben, mit dem ich einen Symlink erstellt habe, aber der Befehl cd .. bringt mich nur zurück in mein Ausgangsverzeichnis / home / jfv / . Gibt es sowieso eine Möglichkeit, dem von mir eingegebenen Symlink-Trail zu entkommen und stattdessen ein pwd zu haben, das dem tatsächlichen Pfad des myproject- Verzeichnisses entspricht ? Das heißt, ich ändere mein pwd von / home / jfv / myproject / in / usr / local / projects / myproject / ?

Vielen Dank :)

Johan Fredrik Varen
quelle

Antworten:

140

Verwenden Sie einfach die -P(physische) Flagge:

pwd -P

cd -P ..
Vgl
quelle
7

Wenn Sie Folgendes tun, sollten Sie in Ordnung sein.

1) Zuerst folgen Sie Ihrem Symlink:

[jfv@localhost ~]$ cd myproject

2) Nun führen Sie den folgenden Befehl aus:

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

3) Jetzt können Sie Ihren Standort überprüfen und sehen, dass Sie sich im physischen Verzeichnis befinden

[jfv@localhost myproject]$ pwd

Die Ausgabe wird wie folgt sein:

/usr/local/projects/myproject

Jetzt ist alles, was Sie tun, lokal und nicht auf dem Symlink.

DrupalFever
quelle
3

Programmatisch würden Sie dies mit der Funktion getcwd library tun:

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

quelle