bash
sleduje logickou cestu k aktuálnímu adresáři, jak je znázorněno ve vaší výzvě, a interpretuje věci jako cd ..
podle toho. Díky tomu jsou věci trochu konzistentnější, pokud takové cesty používáte pouze v cd
(nebo pushd
), za cenu neočekávaných věcí, které se stanou, pokud pak očekáváte, že se totéž stane s cestami v argumentech příkazu (nebo uvnitř příkazů; emacs
a vim
mají svá vlastní konfigurovatelná pravidla pro manipulaci se symbolickými odkazy, ale většina příkazů spoléhá na to, že se s tím vypořádá jádro).
Podle 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 `..'
Jinými slovy -L
znamená použití logického struktura, zatímco -P
používá ve skutečnosti fyzické adresářová struktura.
Logická struktura je taková,
$ tree a
a
└── b
└── symlink -> ..
Skutečná fyzická struktura, když přejdete na a/b/symlink
je,
a
Pokud chcete použít skutečné ..
, pak musíte také použít 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.
Příklad,
$ 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
$