bash
verfolgt den logischen aktuellen Verzeichnispfad, wie in Ihrer Eingabeaufforderung gezeigt, und interpretiert Dinge wie cd ..
danach. Dies macht die Sache etwas konsistenter, wenn Sie solche Pfade nur in cd
verwenden (oder pushd
), auf Kosten unerwarteter Dinge, die passieren, wenn Sie dann erwarten, dass dasselbe mit Pfaden in Befehlsargumenten (oder innerhalb von Befehlen; emacs
) passiert und vim
haben ihre eigenen konfigurierbaren Regeln für die Behandlung von Symlinks, aber die meisten Befehle verlassen sich darauf, dass der Kernel damit umgeht).
Gemäß 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 `..'
Mit anderen Worten:-L
bedeutet, das logische zu verwenden Struktur, während -P
verwendet das tatsächlich Physische Verzeichnisstruktur.
Die logische Struktur sieht folgendermaßen aus:
$ tree a
a
└── b
└── symlink -> ..
Die tatsächliche physische Struktur, wenn Sie zu a/b/symlink
gehen ist,
a
Wenn Sie die echte verwenden möchten ..
, dann müssen Sie auch cd -P
verwenden :
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.
Ein Beispiel,
$ 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
$