Como altero meu PWD para o caminho real de um diretório simplista?
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 :)
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;
}