pwd sem links simbólicos

54

Se eu pwdnotar, ele usa os links simbólicos que usei para entrar no diretório atual. Posso dizer-me o diretório "real" em que estou ... ou seja, o caminho da raiz para o meu diretório atual sem o uso de links simbólicos?

JoelFan
fonte

Respostas:

70

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

-P O nome do caminho absoluto escrito não deve conter nomes de arquivos que, no contexto do nome do caminho, se refiram a arquivos do tipo link simbólico.

portanto

$ pwd -P

deve ser o que você precisa.

Steven D
fonte
Gostaria de salientar que essas informações são facilmente encontradas digitando man pwdno shell para descobrir opções para este comando.
precisa saber é o seguinte
7

O pwd shell interno usa o caminho que o shell monitora quando você cd(e o armazena $PWD). Isso significa que, se você tiver um link simbólico para um caminho complexo (profundo), ele informará o que você digitou para alterar para esse diretório, em vez do caminho real. Isso é feito para fornecer o que você deseja na maioria das vezes.

/bin/pwdusa a getcwdchamada do sistema (que atualmente é uma chamada de biblioteca, lendo /proc/self/cwd) que retorna o caminho canônico para o diretório atual, sem todas as passagens do link simbólico.

Como Steven D apontou, pwdtem a -Popção de ignorar $PWD. Ele também tem a -Lopção de retornar o conteúdo de $PWD. A página de manual do pwdnão diz qual opção é usada por padrão, mas a experiência me diz que a descrição acima está correta (shell pwdvs. /bin/pwd). No entanto, você provavelmente não deve confiar nisso e apenas usá-lo pwd -P.

camh
fonte
2
O comportamento que você descreve é ​​o dos sistemas Linux em que /bin/pwdestá o GNU pwdquando POSIXLY_CORRECT não está definido. Nos sistemas POSIX em que pwdestá /bin. /bin/pwdusará $ PWD e pode retornar caminhos com links simbólicos. O GNU pwd se comportará dessa maneira POSIX quando encontrar uma variável POSIXLY_CORRECT em seu ambiente.
Stéphane Chazelas 2/12/12