Pasta raiz dupla versus pasta raiz única

Pasta raiz dupla versus pasta raiz única

Na minha caixa Linux, no bash, tenho acesso a uma pasta "raiz dupla" indicada por duas barras:

tomas:~ $ cd /
tomas:/ $ ls
bin/ cdrom@ ...
tomas:/ $ cd //
tomas:// $ ls 
bin/ cdrom@ ...

O conteúdo da pasta e de sua subpasta é idêntico ao da raiz de barra única "normal". A barra dupla não desaparece quando acesso suas subpastas. A anomalia não se repete com três ou mais barras; estes são sinônimos simples para a raiz:

tomas:// $ cd home/tomas
tomas://home/tomas $ cd ///
tomas:/ $ cd ////
tomas:/ $

Que tipo de lugar é este? É um bug? Alguém pode explicar a anomalia?

Responder1

DePerguntas frequentes sobre Bash E10:

E10) Por que 'cd //' deixa $PWD como '//'?

POSIX.2, em sua descrição de 'cd', diz quetrêsou mais barras iniciais podem ser substituídas por uma única barra ao canonizar o diretório de trabalho atual.

Isto é, presumo, para compatibilidade histórica. Certas versões do Unix e dos primeiros sistemas de arquivos de rede usavam caminhos no formato //hostname/path para acessar o 'caminho' no servidor 'hostname'.

Responder2

"Isto não é um erro, é um recurso!"

Você ainda está no mesmo diretório raiz. Não sei a origem disso, mas suspeito que possa ter algo a ver com a construção de strings para caminhos absolutos. Se alguém mais tiver certeza, fale.

Responder3

Várias barras são simplesmente ignoradas pelas ferramentas que você usou e você sempre acessa a mesma pasta raiz.

Responder4

Várias barras são tratadas como uma única barra para fins de resolução de nome de caminho.

O que você está vendo no prompt do shell é um artefato de manipulação do bash PS1 (consulte a seção "PROMPTING" na página de manual do bash).

[root@linux /]# cd /    ; echo $PWD
/
[root@linux /]# cd //   ; echo $PWD
//
[root@linux //]# cd /// ; echo $PWD
/
[root@linux /]# cd //// ; echo $PWD
/

O resultado é apenas uma questão de apresentação; você está sempre no mesmo diretório raiz. Você pode verificar isso olhando /proc/$$/root.

[editar] Bem, eu nunca soube disso: http://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap04.html#tag_04_11 O significado de "//" é deixado indefinido pelos padrões, mas "///" e mais barras são equivalentes a "/".

informação relacionada