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/path
bezpośrednio.
pwd -P
lubalias pwd='pwd -P'
teżcd -P
przejść do ścieżki fizycznej zamiast dowiązania symbolicznego.Odpowiedzi:
Twoja powłoka ma wbudowaną funkcję
pwd
, która próbuje być „inteligentna”. Po wykonaniu acd
do dowiązania symbolicznego wewnętrznypwd
fałszuje dane wyjściowe, tak jakbyś przeniósł się do prawdziwego katalogu.Przekaż
-P
opcjępwd
, tjpwd -P
. Uruchom .-P
Opcja (dla „fizyczny”) mówipwd
, 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:źródło
Spróbować
cd -P <symlink_dirname>
.Możesz także użyć,
set -o physical
aby 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.
źródło