Na verdade, Dir2
existe , mas o nome Dir2
não. Confuso? :) O diretório atual do shell ainda é o diretório referido pelo nome Dir2
, e isso mantém o diretório ainda por perto. Isso é análogo a arquivos anônimos. Normalmente, quando os arquivos contagem de links vão para zero, o arquivo é excluído e o inode é liberado. No entanto, se um processo ainda tiver o arquivo aberto, o kernel não excluirá o arquivo até que o processo feche o arquivo, explicitamente ou implicitamente, saindo do arquivo. No caso de Dir2
, o shell ainda está tendo o diretório "aberto", desde que ele não altere seu diretório atual.
O que está desaparecido são os nomes Dir1
no catálogo Desktop
e toda a hierarquia de nomes abaixo, incluindo as entradas .
e ..
. O diretório anteriormente conhecido como Dir1
também desapareceu (assumindo que nenhum outro processo o possui como diretório atual). Arquivos e diretórios no nível inode não formam uma hierarquia, ou seja, não há links de inodes para entradas pai, filho ou irmão. A hierarquia é construída separadamente por entradas de diretório, que são essencialmente pares (nome, inode), apontando para arquivos e outros diretórios.
Após essa longa introdução, podemos reformular sua pergunta original para que ela leia: "por que o shell não altera seu diretório atual para outra coisa, quando a entrada de diretório Dir2
é removida de Dir1
?" Bem, uma razão é que a casca nem sabe disso. Algum outro processo executou o programa rm
e removeu os diretórios, mas não há mecanismo pelo qual o shell seria informado sobre isso. Segundo, qual diretório o shell escolheria como seu novo diretório atual? O diretório é alterado usando a chamada do sistema chdir
, que usa uma cadeia contendo o novo diretório como argumento. O shell poderia tentar um chdir("..")
, mas como vimos acima, nós já destruímos a entrada ..
! Em terceiro lugar, por que o shell deve alterar o diretório atual? Não tem nenhuma razão para fazê-lo, é confortável onde está, e não tem o hábito de mudar magicamente os diretórios sem ser explicitamente instruído a fazê-lo.
Concedido, a situação é meio patológica, mas cabe ao usuário evitá-la.