Em bash , o cd incorporado usa -P e -L switches; pwd os entende da mesma maneira:
user@host:~$ ln -s /bin foobar
user@host:~$ cd -L foobar # follow link
user@host:~/foobar$ pwd -L # print $PWD
/home/user/foobar
user@host:~/foobar$ pwd -P # print physical directory
/bin
user@host:~/foobar$ cd - # return to previous directory
/home/user
user@host:~$ cd -P foobar # use physical directory structure
user@host:/bin$ pwd -L # print $PWD
/bin
user@host:/bin$ pwd -P # print physical directory
/bin
Além disso, cd .. pode ser complicado:
user@host:/bin$ cd
user@host:~$ cd -L foobar
user@host:~/foobar$ cd -L .. # go up, to ~/
user@host:~$ cd -L foobar
user@host:~/foobar$ cd -P .. # go up, but not to ~/
user@host:/$
Veja help cd e help pwd . Note que você também pode ter um executável (isto é, não um shell integrado) como /bin/pwd que deve se comportar de maneira semelhante. No meu Kubuntu, a diferença é que pwd embutido sem nenhuma opção usa -L , enquanto /bin/pwd , por padrão, usa -P .
Você pode ajustar o comportamento padrão de cd incorporado por set -P ( cd age como cd -P ) e set +P ( cd age como cd -L ). Veja help set para detalhes.