pwd sem links simbólicos

46

Se eu fizer pwd , noto que ele usa qualquer link simbólico que usei para entrar no diretório atual. Posso fazer isso para me dizer o diretório "real" em que estou ... ou seja, o caminho da raiz para o meu diretório atual sem o uso de nenhum link simbólico?

    
por JoelFan 02.02.2011 / 19:07

2 respostas

61

De acordo com a página de manual do POSIX para pwd , a opção -P pode ser útil:

-P The absolute pathname written shall not contain filenames that, in the context of the pathname, refer to files of type symbolic link.

Assim

$ pwd -P

deve ser o que você precisa.

    
por 02.02.2011 / 19:44
7

O shell pwd embutido usa o caminho que o shell controla quando você cd (e armazena em $PWD ). Isso significa que, se você tiver um link simbólico para um caminho complexo (profundo), ele informará o que você digitou para alterar esse diretório em vez do caminho real. Isso é feito para dar o que você deseja na maior parte do tempo.

/bin/pwd usa a chamada de sistema getcwd (que hoje em dia é uma chamada de biblioteca, lendo /proc/self/cwd ) que retorna o caminho canônico para o diretório atual, sem todas as travessias de links simbólicos.

Como Steven D apontou, pwd tem a opção -P para ignorar $PWD . Ele também tem a opção -L para retornar o conteúdo de $PWD . A man page para pwd não diz qual opção é usada por padrão, mas a experiência me diz que a descrição acima está correta (shell pwd vs. /bin/pwd ). No entanto, você provavelmente não deve confiar nisso e usar apenas pwd -P .

    
por 02.02.2011 / 23:35

Tags