Perché bash cd su //?


7

In bash se cd su // il tuo pwd sarà //, ma se cd su / o /// + il tuo pwd sarà /. C'è una ragione per questo o è solo uno strano bug?

Ho provato questo in osx e ubuntu.

Risposte:


8

Dalle FAQ di Bash :

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

POSIX.2, nella sua descrizione di "cd", afferma che tre o più barre iniziali possono essere sostituite con una singola barra quando si canonicalizza la directory di lavoro corrente.

Questo, presumo, per compatibilità storica. Alcune versioni di Unix e dei primi file system di rete utilizzavano percorsi del modulo // nomehost / percorso per accedere a `percorso 'sul server` nomehost'.


bello, anche se era un bug ... :)
Johan,

2
Nota Windows utilizza ancora // per i percorsi di rete, quindi potrebbe trattarsi anche di una compatibilità SMB.
Nome falso

5
Tecnicamente, Windows utilizza \\ per i percorsi UNC.
ThatGraemeGuy

0

Sebbene la risposta fosse corretta sui dati forniti, non rispondeva perfettamente alla domanda posta.

La shell sta normalizzando il percorso. Fa:

  • cambia i componenti part1 / part2 / .. in part1 /
  • cambia i componenti // + in /

Puoi verificarlo con strace, che vedrà ciò che è effettivamente passato nella scala di sistema

strace -o /tmp/strace.out bash -c "cd ///tmp"
grep chdir /tmp/strace.out
# will give chdir("/tmp")

strace -o /tmp/strace.out bash -c "cd ///tmp/../etc"
grep chdir /tmp/strace.out
# will give chdir("/etc")

La shell esegue la normalizzazione del percorso prima ancora di dire al sistema di cambiare la directory

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.