2012-05-04 16 views
24

Si supponga di avere le cartelle ~/a/b nella cartella home e la cartella b contenga un collegamento simbolico a ".." denominato "link simbolico". Poi ho eseguire le seguenti azioni in bash:Comportamento di cd/bash su collegamenti simbolici

[email protected]:~$ cd a/b/symlink 
[email protected]:~/a/b/symlink$ pwd -P 
/home/hm/a 
[email protected]:~/a/b/symlink$ cd .. 
[email protected]:~/a/b$ pwd -P 
/home/hm/a/b 

-P pwd stampa la directory di lavoro corrente, dereferenziazione tutti i link simbolici. Perché la directory di lavoro/home/hm/a/b, alla fine, e non/home/hm?

risposta

26

bash è essere "amica"; quando si cd /into/a/symlink/, la shell ricorda la vecchia posizione (in $OLDPWD) e userà che directory quando si cd .. sotto l'ipotesi che si desidera tornare alla directory eri solo in.

Se si desidera utilizzare il vera.., allora è necessario utilizzare anche cd -P:

  The -P option says to use the physical directory 
      structure instead of following symbolic links (see 
      also the -P option to the set builtin command); 
      the -L option forces symbolic links to be followed. 
$ cd 
$ cd a/b/symlink 
$ cd -P .. 
$ pwd -P 
/home/sarnold 
$ 
+8

FYI, è possibile usare 'impostare physical' -o o' impostare -P' per rendere questo comportamento permanente. – Kevin

+1

.. Devo dire che l'implementazione è probabilmente più in linea con la descrizione di @ geekosaur; Non mi aspetterei che sovrascrivere 'OLDPWD' con il tuo valore influenzerebbe effettivamente il comportamento di' cd ..'. – sarnold

+0

Sono d'accordo sul fatto che non penso che l'OLDPWD faccia effettivamente qualcosa qui. L'ho provato con "cd" giù una catena di symlink tre livelli in profondità e poi facendo "cd .." alcune volte. Ha funzionato bene. Se fosse utilizzato OLDPWD, non funzionerebbe. OLDPWD memorizza solo una directory e non può essere utilizzata per tornare a più di una directory. Pertanto, OLDPWD non viene utilizzato. –

4

bash tiene traccia del percorso logico corrente della directory, come mostrato nel prompt, e interpreta le cose come cd .. in base a ciò. Ciò rende le cose un po 'più coerenti se si utilizzano tali percorsi solo in cd (o pushd), al costo di cose inaspettate che accadono se ci si aspetta che la stessa cosa accada con percorsi in argomenti di comando (o comandi interni; emacs e vim hanno le proprie regole configurabili per la gestione dei collegamenti simbolici, ma la maggior parte dei comandi si basa sul kernel per gestirli).

Problemi correlati