Quando percorro um link simbólico, por que o pwd mostra o link simbólico em vez do caminho real?

19

Criei um link flexível ( ln -s 1 2) para um diretório que está dentro do testdiretório, abri o link flexível ( cd 2) e exibi o caminho atual usando pwd. O caminho exibido era ~/test/2e não ~/test/1.

É diferente em um sistema operacional como o Windows, o atalho nos leva ao diretório real. Estou um pouco confuso sobre como esse link não funciona no Linux. Não é um atalho como em Windows? Por que o caminho não é ~/test/1?

 $ mkdir test
 $ cd test
 $ mkdir 1
 $ ln -s 1 2
 $ cd 2
 $ pwd
 /home/dazz/test/2
DScript
fonte
2
Obrigado por remover a captura de tela. Da próxima vez, edite sua pergunta em vez de excluir e republicar. A exclusão de muitas de suas próprias perguntas pode impedi-lo de fazer. Essa proibição é automática, portanto não poderemos fazer muito a respeito. De qualquer forma, você não precisa repassar, pois a edição esbarra na questão .
terdon
Por que você pergunta duas vezes? askubuntu.com/q/610133/367165
AB
AB mesmo fórum?
DScript 16/04

Respostas:

18

Essa é uma característica do shell que lembra como você chegou aonde está.
Se você realpathinstalou, você pode:

$ realpath 
/home/dazz/test/1

E falta isso se você tiver python:

$ python -c "import os; print(os.path.realpath('.'))"
/home/dazz/test/1

ou readlink (de coreutils):

$ readlink -f .
/home/dazz/test/1

ou /bin/pwd(não o shell interno pwd):

$ /bin/pwd
/home/dazz/test/1
Anthon
fonte
ls -l /proc/$$/cwdtira proveito da /procinterface do sistema de arquivos do kernel .
precisa
8
Observe também pwd -Ppara imprimir o caminho físico, em vez de lógico, para o diretório atual.
godlygeek
8

Contraste pwde /bin/pwd.

pwd, que é um comando interno em muitos shells, informa onde seu shell pensa que você está (e, portanto, trata os links simbólicos "links suaves" como se fossem diretórios reais.

/bin/pwdé um programa externo que indica onde você realmente está, se necessário, percorrendo a árvore do sistema de arquivos até /. Ele não leva em consideração os links simbólicos, porque eles não existem quando se move para cima..

roaima
fonte
6

Outras respostas cobriram /bin/pwdvs do shell builtin pwd.

Se você deseja seguir os links simbólicos no estilo Windows mencionado, use cd -P: ele alterará a variável PWD de acordo.

Se você deseja usar -Ppor padrão, pode adicionar esta linha ao seu .bashrcou .zshrc:

set -P

Outras conchas podem variar.

David Lord
fonte