O Manual de Bash dá um pouco mais de detalhes.
-
cd -P
garante que você tenha um caminho "real":$ cd /tmp $ mkdir -p a/b $ ln -s a/b b $ cd b $ pwd /tmp/b $ cd -P ../b $ pwd /tmp/a/b
Usar
-P
significa que o symlink deb
toa/b
é desreferenciado. A interação com..
é que..
é normalmente processado removendo o componente do caminho anterior, se houver um; não verificando o caminho no disco. Se você usa muitos links simbólicos, isso pode acabar sendo muito confuso. -
cd -L
é equivalente ao padrãocd
. -
O diretório de trabalho atual não pode ser determinado se tiver sido excluído:
$ cd /tmp $ mkdir -p c/d $ cd c/d $ rmdir ../d ../../c $ cd ..; echo $? cd: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory 0
v.
$ cd -Pe ..; echo $? cd: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory 1
-
Não sei ao certo (posso imaginar como seria, mas o Bash apenas diz "
cd
:-@
: opção inválida"; tenho a impressão de que atualmente só está disponível em Solaris, precisa deO_XATTR
).