2010-02-19 5 views
61

Hier ist eine ziemlich elementar * nichts Frage:Wie ändere ich meine Pwd in den realen Pfad eines symlinked Verzeichnisses?

folgende Symlink Schaffung Gegeben:

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

... aus meinem Home-Verzeichnis /home/JVF/, die myproject Eingabe Symlink gibt mir a pwd /home/jfv/meinprojekt/. Nun möchte ich das Elternverzeichnis des Verzeichnisses eingeben, mit dem ich verlinkt bin, aber der cd .. Befehl bringt mich nur zurück in mein Heimatverzeichnis /home/jfv/. Gibt es irgendwie den Symlink Trail, den ich eingegeben habe, zu entkommen, und stattdessen eine pwd gleich dem tatsächlichen Pfad des myproject Verzeichnisses. Das heißt, mein Pwd von /home/jfv/meinprojekt/ in /usr/local/projects/myproject/?

Thanks :)

Antwort

109

Gerade -P (physischen) Flag verwenden:

pwd -P 

cd -P .. 
+0

Danke ein Dutzend: D –

3

Programmatisch Sie würden dies mit der getcwd Bibliotheksfunktion:

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

Danke, ich behalte das im Hinterkopf sollte ich jemals das programmatisch tun müssen;) –

5

Wenn Sie Folgendes tun Du solltest in Ordnung sein.

1) Zuerst folgen Sie Symlink:

[[email protected] ~]$ cd myproject 

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

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

3) Jetzt können Sie Ihren Standort überprüfen und Sie, dass Sie sehen, sind auf dem physischen Verzeichnis

[[email protected] myproject]$ pwd 

die Ausgabe wie folgt sein:

/usr/local/projects/myproject 

Nun, alles, was Sie tun, auf dem Symlink lokale und nicht sein.