
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 "/".