bash
tiene traccia del percorso logico della directory corrente, come mostrato nel prompt, e interpreta cose come cd ..
secondo quello. Questo rende le cose un po' più coerenti se usi tali percorsi solo in cd
(o pushd
), a costo di cose inaspettate che accadono se ti aspetti che la stessa cosa accada con i percorsi negli argomenti dei comandi (o all'interno dei comandi; emacs
e vim
hanno le proprie regole configurabili per la gestione dei collegamenti simbolici, ma la maggior parte dei comandi si affida al kernel per gestirli).
Secondo help cd
,
Options:
-L force symbolic links to be followed: resolve symbolic
links in DIR after processing instances of `..'
-P use the physical directory structure without following
symbolic links: resolve symbolic links in DIR before
processing instances of `..'
In altre parole, -L
significa usare la logica struttura, mentre -P
utilizza l'attuale fisico struttura della directory.
La struttura logica è così,
$ tree a
a
└── b
└── symlink -> ..
L'effettiva struttura fisica quando vai a a/b/symlink
è,
a
Se vuoi usare il file real ..
, allora devi usare 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.
Un esempio,
$ cd
$ cd a/b/symlink # physical location is at a/
$ cd .. # now is at a/b
$ cd symlink # goes back to a/b/symlink
$ cd -P .. # follow physical path (resolve all symlinks)
$ pwd -P # -P is optional here to show effect of cd ..
/home/sarnold
$