Pasta raiz dupla vs pasta raiz única

14

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

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

O conteúdo da pasta e sua subpasta é idêntico ao da raiz simples "normal". A barra dupla não desaparece quando eu 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 é esse? Isso é um bug? Alguém pode explicar a anomalia?

    
por Tomas 14.09.2010 / 13:13

4 respostas

18

Em Perguntas frequentes da Bash E10 :

E10) Why does 'cd //' leave $PWD as '//'?

POSIX.2, in its description of 'cd', says that three or more leading slashes may be replaced with a single slash when canonicalizing the current working directory.

This is, I presume, for historical compatibility. Certain versions of Unix, and early network file systems, used paths of the form //hostname/path to access 'path' on server 'hostname'.

    
por 14.09.2010 / 15:38
1

"Não é um bug, é um recurso!"

Você ainda está no mesmo diretório raiz. Eu não sei as origens disso, mas suspeito que possa ter algo a ver com a construção de strings para caminhos absolutos. Se alguém souber com certeza, aprenda.

    
por 14.09.2010 / 14:04
0

Várias barras são ignoradas pelas ferramentas que você usou e você está sempre chegando à mesma pasta raiz.

    
por 14.09.2010 / 14:05
0

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 do tratamento bash do PS1 (consulte a seção "PROMPTING" na manpage 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: link O significado de "//" é deixado indefinido pelos padrões, mas "///" e mais barras são equivalentes a "/".

    
por 14.09.2010 / 15:18

Tags