Pasta raiz dupla vs pasta raiz única


14

Na minha caixa Linux, no bash, 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 à raiz de barra única "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 é este? Isso é um bug? Alguém pode explicar a anomalia?


boa pergunta - notei o mesmo comportamento, mas nunca perguntei por que isso acontece.
precisa saber é o seguinte

Respostas:


18

Do Bash FAQ E10 :

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

O POSIX.2, em sua descrição de 'cd', diz que três ou mais barras principais podem ser substituídas por uma única barra ao canonizar o diretório de trabalho atual.

Presumo que isto seja para compatibilidade histórica. Certas versões do Unix e sistemas de arquivos de rede anteriores usavam caminhos no formato // hostname / path para acessar 'path' no servidor 'hostname'.


1
O domínio / sistema operacional é um desses sistemas.
user1686

1
A coisa de barra dupla ainda é usada. Faz parte da Convenção de Nomenclatura Universal (ou Uniforme; não consigo encontrar uma fonte primária) ou UNC. Ele aparece no Windows, Unix e Linux. É o motivo pelo qual uma barra dupla é usada nos URLs.
Isaac Rabinovitch

1

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

Você ainda está no mesmo diretório raiz. Não sei as origens disso, mas suspeito que possa ter algo a ver com a construção de strings para caminhos absolutos. Se mais alguém souber ao certo, entre em contato.


0

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


Então, por que o bash muda /// para / enquanto deixa // como está?
Tomas

0

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

O que você vê no prompt do shell é um artefato do manuseio 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 para /proc/$$/root.

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.