Rozwiązywanie dowiązań symbolicznych (pwd)

32

Powiedz, że wykonuję następujące czynności:

cd /some/path
ln -s /target/path symbolic_name

Jeśli następnie:

cd /some/path
cd symbolic_name
pwd

Dostaję:

/some/path/symblic_name

i nie:

/target/path

Czy istnieje sposób, aby powłoka „w pełni rozwiązała” dowiązanie symboliczne (tj. Aktualizację CWD itp.), Tak jakbym to zrobił bezpośrednio:

cd /target/path

?

Muszę uruchomić niektóre programy, które wydają się być „świadome” lub „wrażliwe” na temat tego, w jaki sposób docieram do ścieżki docelowej, i chciałbym, aby pomyślały, że doszedłem do ścieżki docelowej tak, jakby to zrobiło cd /target/pathbezpośrednio.

Amelio Vazquez-Reina
źródło
7
Powiązane z tym pytaniem . Możesz zrobić pwd -Plub alias pwd='pwd -P'też cd -Pprzejść do ścieżki fizycznej zamiast dowiązania symbolicznego.
Martín Canaval
@ MartínCanaval Dzięki; tego szukałem!
Ryan

Odpowiedzi:

35

Twoja powłoka ma wbudowaną funkcję pwd, która próbuje być „inteligentna”. Po wykonaniu a cddo dowiązania symbolicznego wewnętrzny pwdfałszuje dane wyjściowe, tak jakbyś przeniósł się do prawdziwego katalogu.

Przekaż -Popcję pwd, tj pwd -P. Uruchom . -POpcja (dla „fizyczny”) mówi pwd, aby nie wykonywać żadnej symbolicznej śledzenie łącza i wyświetlić „prawdziwy” ścieżkę do katalogu.

Alternatywnie, powinien istnieć również prawdziwy plik binarny pwd, który nie robi (a nawet nie jest w stanie tego robić) tego rodzaju magii. Po prostu użyj tej binarnej objaśnienia:

$ type -a pwd
pwd is a shell builtin
pwd is /bin/pwd
$ mkdir a
$ ln -s a b
$ cd b
$ pwd
/home/michas/b
$ /bin/pwd
/home/michas/a
michas
źródło
12

Spróbować cd -P <symlink_dirname>.

tim@ls:~$ mkdir a
tim@ls:~$ ln -s a b

tim@ls:~$ cd b
tim@ls:~/b$ pwd
/home/tim/b

tim@ls:~/b$ cd ..
tim@ls:~$ cd -P b
tim@ls:~/a$ pwd
/home/tim/a

Możesz także użyć, set -o physicalaby utrzymać to zachowanie przez cały czas działania działającej powłoki.

Sprawdź https://stackoverflow.com/questions/10456784/behavior-of-cd-bash-on-symbolic-links, aby uzyskać więcej dobrych informacji.

livingstaccato
źródło