bash
"sabe" sobre links simbólicos e rastreia esta informação quando você usa um symlink para entrar em um diretório.
Você pode verificar isso fazendo o seguinte no seu exemplo:
$ cd /dir2
$ cd linked
$ pwd
/dir2/linked
$ PWD='' bash -c pwd
/dir1
Você precisa iniciar o bash com uma variável PWD
vazia, caso contrário, ele usará esse truque para exibir o caminho "falso".
Observe que ls
é um programa separado e, como tal, não tem conhecimento de como você chegou ao diretório atual, portanto ls ..
mostrará apenas o conteúdo do diretório real , não relativo ao symlink que você seguiu.
A maioria dos programas não depende da variável de ambiente CWD
, pois há muitas maneiras de iniciar programas, através do bash shell é apenas um, então não é confiável esperar que CWD
contenha o valor correto (tente definir CWD
de algo errado antes de fazer bash -c pwd
, você pode ver que ele verifica o valor da sanidade).