Doppia cartella radice vs singola cartella principale


14

Sulla mia Linux box, in bash, ho accesso a una cartella "double root" denotata da due barre in avanti:

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

Il contenuto della cartella e della relativa sottocartella è identico alla "normale" barra singola. La doppia barra non scompare quando accedo alle sue sottocartelle. L'annomalia non si ripete con tre o più tagli; questi sono semplici sinonimi per la radice:

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

Che tipo di posto è? è un insetto? Qualcuno può spiegare l'anomalia?


buona domanda - ho notato lo stesso comportamento, ma non ho mai chiesto perché questo accade.
lajuette

Risposte:


18

A partire dal Domande frequenti su Bash E10 :

E10) Perché 'cd //' lascia $ PWD come '//'?

POSIX.2, nella sua descrizione di "cd", lo dice tre o più leader   le barre possono essere sostituite con una singola barra quando canonicalizzano il   directory di lavoro corrente.

Questo è, presumo, per compatibilità storica. Alcune versioni di   Unix e primi file system di rete, utilizzavano percorsi del modulo   // nomehost / percorso per accedere al "percorso" sul server "nomehost".


1
Dominio / OS è uno di questi sistemi.
grawity

1
La cosa a doppio taglio è ancora usata. Fa parte dell'universale (o dell'uniforme, non riesco a trovare una fonte primaria) Naming Convention o UNC. Appare in Windows, Unix e Linux. Capita di essere il motivo per cui una doppia barra viene utilizzata negli URL.
Isaac Rabinovitch

1

"Non è un bug, è una caratteristica!"

Sei ancora nella stessa directory radice. Non conosco le origini di questo, ma sospetto che possa avere qualcosa a che fare con la costruzione di stringhe per percorsi assoluti. Se qualcuno lo sa per certo, fai pipì.


0

Le barre multiple vengono semplicemente ignorate dagli strumenti che hai utilizzato e ti trovi sempre nella stessa cartella radice.


Quindi, perché bash cambia /// in / mentre esce // così com'è?
Tomas

0

Più barre vengono considerate come una singola barra per scopi di risoluzione del nome del percorso.

Quello che stai vedendo nel prompt della shell è un artefatto della gestione di bash PS1 (vedi la sezione "PROMPTING" nella manpage di bash).

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

Il risultato è solo una questione di presentazione; sei sempre nella stessa directory radice. Puoi controllare questo guardando /proc/$$/root.

[modificare] Beh, non l'ho mai saputo http://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap04.html#tag_04_11 Il significato di "//" non è definito dagli standard, ma "///" e più barre equivalgono a "/".

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.