Pergunta

Aqui está uma pergunta bastante elementar *nix:

Dada a seguinte criação simplista:

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

... do meu diretório doméstico /home/jvf/, entrando no meu projeto Symlink me dá um PWD /home/jfv/myProject/. Agora, eu gostaria de entrar no diretório pai do diretório com que simplifiquei, mas o cd .. O comando só me trará de volta ao meu diretório inicial /home/jfv/. Existe de qualquer maneira para escapar da trilha simplink que eu entrei e, em vez disso, tenha um PWD igual ao caminho real do meu projeto diretório. Isto é, mudando meu PWD de /home/jfv/myProject/ em /usr/local/Projects/myProject/?

Obrigado :)

Foi útil?

Solução

Apenas use -P (físico) sinalizador:

pwd -P

cd -P ..

Outras dicas

Se você fizer o seguinte, você deve ficar bem.

1) Primeiro você segue seu symlink:

[jfv@localhost ~]$ cd myproject

2) Agora você executa o seguinte comando:

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

3) Agora, você pode verificar sua localização e verá que está no diretório físico

[jfv@localhost myproject]$ pwd

A saída será a seguinte:

/usr/local/projects/myproject

Agora, tudo o que você faz será local e não no symlink.

Programaticamente, você faria isso com a função GETCWD Library:

#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;
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top