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/pwd
oblicza 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 pwd
wbudowaną 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 cd
polecenie, twoja powłoka zapamiętuje to jako część ścieżki, aby dostać się tam, gdzie jesteś teraz, i pwd
wypisuje to, co oblicza na podstawie wszystkich cd
wykonanych poleceń - które mogą, ale nie muszą, być twoje katalog roboczy.
Sprawy mogą stać się naprawdę dziwne, kiedy wykonujesz a ln -s . foo
i ciągle cd
przechodzisz do foo - /bin/pwd
powiesz, że wciąż jesteś w tym samym katalogu, ale wbudowana powłoka pwd
powie, ż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/pwd
natychmiast przejmie zmianę, ale wbudowane pwd
nie zrobi tego, dopóki nie zrobisz czegoś, co powie, że stara nazwa katalogu nie ma znaczenia.