Comment puis-je changer mon PWD au vrai chemin d'un répertoire ayant un lien symbolique?

StackOverflow https://stackoverflow.com/questions/2299157

  •  21-09-2019
  •  | 
  •  

Question

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

Compte tenu de la création symlink suivante:

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

... à partir de mon répertoire / home / JVF / , entrant dans le myproject symlink me donne un PWD / home / jfv / myproject / . Maintenant, je voudrais entrer dans le répertoire parent du répertoire que j'ai un lien symbolique, mais cd .. commande ne me ramener à mon répertoire / home / jfv / . Y at-il de toute façon d'échapper à la piste symlink que je suis entré, et ont plutôt une PWD égale à la trajectoire réelle du myproject Répertoire. Autrement dit, changer mon PWD de / home / jfv / myproject / dans / usr / local / projets / myproject /

Merci:)

Était-ce utile?

La solution

Il suffit d'utiliser -P (physique) drapeau:

pwd -P

cd -P ..

Autres conseils

Si vous ne vous la suivante devriez être OK.

1) D'abord, vous suivez 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 position et vous verrez que vous êtes sur le répertoire physique

[jfv@localhost myproject]$ pwd

La sortie sera comme suit:

/usr/local/projects/myproject

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

Programmatically, vous devez faire cela 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;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top