web-dev-qa-db-fra.com

Comment puis-je changer mon pwd pour le vrai chemin d'un répertoire lié symboliquement?

Voici une question plutôt élémentaire * nix:

Étant donné la création de lien symbolique suivante:

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

... depuis mon répertoire personnel / home/jvf /, entrer le lien symbolique myproject me donne un pwd / home/jfv/myproject /. Maintenant, je voudrais entrer dans le répertoire parent du répertoire auquel j'ai créé un lien symbolique, mais la commande cd .. ne me ramènera qu'à mon répertoire personnel / home/jfv/. Existe-t-il de toute façon pour échapper au chemin du lien symbolique que j'ai entré et avoir à la place un pwd égal au chemin réel du répertoire monprojet. Autrement dit, changer mon pwd de / home/jfv/myproject / en / usr/local/projects/myproject /?

Merci :)

79
Johan Fredrik Varen

Utilisez simplement -P drapeau (physique):

pwd -P

cd -P ..
131
Cfr

Si vous procédez comme suit, vous devriez être OK.

1) Vous suivez d'abord votre lien symbolique:

[jfv@localhost ~]$ cd myproject

2) Maintenant, vous exécutez la commande suivante:

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

3) Maintenant, vous pouvez vérifier votre emplacement et vous verrez que vous êtes dans le répertoire physique

[jfv@localhost myproject]$ pwd

La sortie sera la suivante:

/usr/local/projects/myproject

Maintenant, tout ce que vous faites sera local et non sur le lien symbolique.

5
DrupalFever

Par programme, vous le feriez avec la fonction de bibliothèque 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;
}
3
user25148