De acordo com a página de manual do Bash, a -e
opção cd
leva a um status de retorno malsucedido após uma mudança de diretório bem-sucedida .
Se a opção -e for fornecida com -P e o diretório de trabalho atual não puder ser determinado com êxito após uma mudança de diretório bem-sucedida, cd retornará um status malsucedido.
$ cd
$ mkdir -p test/a/b
$ cd test/a/b
$ rmdir ../b ../../a
$ cd -Pe ..; echo $?
cd: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
1
Por que o acima está retornando 1
? Como poderia cd -Pe ..
ter feito uma alteração de diretório bem-sucedida se os diretórios pai e atual não existem mais?
Além disso, se eu quiser cd
retornar um status de retorno malsucedido toda vez que ele não puder mudar para o diretório desejado, quais são as situações em que devo adicionar -Pe
? Pelo que entendi, é necessário apenas se .
ou ..
for usado no argumento para cd
.
1 como código de saída indica falha, não sucesso. Portanto,
cd -Pe ..
está indicando corretamente que não foi possível determinar o diretório atual após a alteração.Tanto quanto eu posso dizer, você está certo sobre quando
-Pe
é necessário. Em outros casos, por exemplo, se você tiver um link simbólico quebrado para um diretório excluído,cd
falhará com uma mensagem de erro e um código de saída de 1 sem-Pe
.Veja exemplos de opções para bash cd, por exemplo: cd -Pe@ $directory para saber mais sobre isso...
Porque eles ainda existem, desde que seu shell (ou algum outro processo) os mantenha abertos ou como seu diretório atual. Isso é semelhante a como os arquivos existem até que o usuário final os feche, embora com diretórios seja menos útil, pois você não pode ter arquivos neles (o diretório deve estar vazio quando desvinculado).
Mesmo sem
-e
,cd
reclama, mas a mudança de diretório continua como você viu. Aqui, podemos diferenciar os diretórios das permissões, não que ainda seja útil:Não consigo pensar em outra maneira de alterar o diretório de trabalho para um diretório cujo caminho completo não pôde ser determinado. É possível
cd
entrar em um diretório onde você não tem acesso de leitura aos diretórios intermediários. Mas, mesmo nesse caso, você saberia o caminho que seguiu, diretamente ou analisando manualmente todos os links simbólicos no caminho.E pelo menos no Linux,
getcwd()
informa o caminho para o diretório atual, mesmo que o processo não possa ler os nomes dos diretórios intermediários. Embora a página de manual mencionechroot
s e monte namespaces como métodos possíveis de um processo estar em um diretório que não pode ser acessado pelo nome.