
Em bash 4.4.12
, help cd
diz:
Options: -L force symbolic links to be followed: resolve symbolic links in DIR after processing instances of `..' -P use the physical directory structure without following symbolic links: resolve symbolic links in DIR before processing instances of `..' -e if the -P option is supplied, and the current working directory cannot be determined successfully, exit with a non-zero status -@ on systems that support it, present a file with extended attributes as a directory containing the file attributes
Estou tendo dificuldade em entender essas palavras e meu google-fu não consegue trazer nada à tona.
- Qual é um exemplo de quando
cd -P
seria preferidocd
? - Como é
cd -L
diferente do padrãocd
? - Como seria possível que o diretório de trabalho não pudesse ser determinado com êxito?
- O que é um exemplo de uso
-@
?
Responder1
OManual do Bashdá um pouco mais de detalhes.
cd -P
garante que você termine com 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 link simbólico deb
paraa/b
é desreferenciado. A interação com..
é..
normalmente processada removendo o componente do caminho anterior, se houver; não verificando o caminho no disco. Se você usar 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 tenho certeza sobre isso (posso imaginar como seria, mas Bash apenas diz “
cd
:-@
: opção inválida”; tenho a impressão de que atualmente só está disponível no Solaris, é necessárioO_XATTR
).