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.


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.