O que // significa em um caminho?

9

Eu estava trabalhando no meu terminal, quando escrevi errado enquanto fazia cdroot ( /). Acidentalmente, digitei //e entrei no terminal:

root@weblocalhost://#

Quando digito pwd, recebo resposta, //mas quando digito recebo a ls -smesma lista do /diretório.

Quando você digita mais de 2, ou seja, ///você obtém:

root@weblocalhost:/#

Sempre 1, /exceto 2. Existe alguma diferença e para que serve //?

Dimitris Theodoridis
fonte

Respostas:

8

/ é equivalente a //

A partir da especificação POSIX (ênfase adicionada):

3.267 Nome do caminho

Uma sequência usada para identificar um arquivo. No contexto de POSIX.1-2008, um nome de caminho pode ser limitado a bytes {PATH_MAX}, incluindo o byte nulo final. Possui <slash> caracteres iniciais opcionais , seguidos por zero ou mais nomes de arquivos separados por <slash> caracteres. Um nome de caminho pode opcionalmente conter um ou mais <slash>caracteres finais . Vários <slash>caracteres sucessivos são considerados iguais a um <slash>, exceto no caso de exatamente dois <slash>caracteres iniciais .

E :

4.12 Resolução do nome do caminho

...
Um nome de caminho que consiste em um único <slash>deve ser resolvido no diretório raiz do processo. Um nome de caminho nulo não deve ser resolvido com êxito. Se um nome de caminho começa com dois <slash>caracteres sucessivos , o primeiro componente após os <slash>caracteres iniciais pode ser interpretado de uma maneira definida pela implementação, embora mais de dois <slash>caracteres principais sejam tratados como um único <slash> caractere.

Para uma boa discussão de exceções (cygwin e diretórios), consulte: Como o linux lida com vários separadores de caminho consecutivos (/ home //// nome_de_usuário /// arquivo)?

Pantera
fonte
4

Você pode adicionar várias barras a um diretório e isso não mudará nada.

Por exemplo, esses três comandos fazem o mesmo:
cd /home
cd /home/
cd /home//

Depois de qualquer um desses, meu diretório de trabalho atual é definido como / home (verifique com pwd).

Eu acho que você tem seu prompt configurado para fazer algo inteligente e que teve um comportamento imprevisto. O que você ganha quando você echo $PS1?

Link para um comentário em https://unix.stackexchange.com/ que pode explicar isso.

Hennes
fonte
Meu PS1 no bash no OSX é "\ h: \ W \ u \ $" e também recebo esse comportamento estranho. / e /// e //// e ///// são exibidos como /, mas o caso especial de duas barras é exibido como duas barras.
Sparr 28/03/2013
Eu consegui o \ u @ \ h: \ w (<b> u </b> ser em <b> h </b> ost, <b> w </b> dir orking) no Ubuntu 12.10, mas não consigo reproduzir o problema.
Hennes 28/03
não, eu sempre fico // ao verificar pwd em qualquer caso. para eco $ PS1, recebo: \ [\ e] 0; \ u @ \ h: \ w \ a \] $ {debian_chroot: + ($ debian_chroot)} \ u @ \ h: \ w \ $
Dimitris Theodoridis
Acabei de definir manualmente meu PS1 e não consigo reproduzi-lo com duas barras. Esquisito. Não com 1, 3 ou 4. Somente com 2. Não consigo explicar isso.
Hennes 28/03
Talvez este comentário de unix.stackexchange seja a resposta: acredito que as APIs compatíveis com Windows POSIX também tratem // remote / ... da mesma forma que o formato UNC path \\ remote \ .... - Stephen P 20 jan '11 em 0:39
Hennes