Naprawdę jesteś /home/cpm135/public_html/class- to jedyna poprawna odpowiedź na pytanie „jaki jest mój bieżący katalog roboczy”.
Kiedy odnosisz się do /var/lib/class... to tak naprawdę nie chodzi o to, gdzie jesteś, ale o to, jaką ścieżkę się tam dostałeś .
Po uruchomieniu /bin/pwdoblicza bieżący katalog roboczy, patrząc na. i .. katalogi (wymienione na górze ls -la), określające, który katalog w .. pasuje do. a następnie pracując wstecz do ... i. odnoszą się do tego samego katalogu. Po wykonaniu tego wszystkiego wie, jaki jest twój bieżący katalog roboczy.
Kiedy uruchomisz pwdwbudowaną powłokę, nie postępuje ona zgodnie z tą procedurą (choć może zrobić to w razie potrzeby) - zamiast tego pamięta ścieżkę, którą podjąłeś, aby się tu dostać. Tak więc za każdym razem, gdy wykonujesz cdpolecenie, twoja powłoka zapamiętuje to jako część ścieżki, aby dostać się tam, gdzie jesteś teraz, i pwdwypisuje to, co oblicza na podstawie wszystkich cdwykonanych poleceń - które mogą, ale nie muszą, być twoje katalog roboczy.
Sprawy mogą stać się naprawdę dziwne, kiedy wykonujesz a ln -s . fooi ciągle cdprzechodzisz do foo - /bin/pwdpowiesz, że wciąż jesteś w tym samym katalogu, ale wbudowana powłoka pwdpowie, że jesteś /foo/foo/foo/foo/foo/foo- nawet jeśli takiego katalogu nawet nie ma. (To powiedziawszy - prawdopodobnie potrafisz cd .)
Innym źródłem nieporozumień jest zmiana nazw katalogów. /bin/pwdnatychmiast przejmie zmianę, ale wbudowane pwdnie zrobi tego, dopóki nie zrobisz czegoś, co powie, że stara nazwa katalogu nie ma znaczenia.