Jeśli to zrobię pwd
, zauważę, że używa wszelkich dowiązań symbolicznych, których użyłem, aby dostać się do bieżącego katalogu. Czy mogę uzyskać informację, że mam „prawdziwy” katalog, w którym się znajduję… tzn. Ścieżkę z katalogu głównego do mojego bieżącego katalogu bez użycia jakichkolwiek dowiązań symbolicznych?
54
man pwd
zauważyć, że informacje te można łatwo znaleźć, wpisując polecenie shell w celu znalezienia opcji dla tego polecenia.Wbudowana powłoka pwd korzysta ze ścieżki, którą powłoka śledzi, kiedy użytkownik
cd
(i przechowuje ją$PWD
). Oznacza to, że jeśli masz dowiązanie symboliczne do złożonej (głębokiej) ścieżki, powie ci, co wpisałeś, aby przejść do tego katalogu zamiast prawdziwej ścieżki. Robi się to, aby zapewnić ci to, czego chcesz przez większość czasu./bin/pwd
korzysta zgetcwd
wywołania systemowego (które w dzisiejszych czasach jest wywołaniem bibliotecznym, czytającym/proc/self/cwd
), które zwraca ścieżkę kanoniczną dla bieżącego katalogu, przeszukuje wszystkie przejścia dowiązań symbolicznych.Jak zauważył Steven D.,
pwd
ma-P
możliwość zignorowania$PWD
. Ma również-L
opcję zwrócenia zawartości$PWD
. Stronapwd
podręcznika dla nie mówi, która opcja jest używana domyślnie, ale doświadczenie mówi mi, że powyższy opis jest poprawny (shellpwd
vs./bin/pwd
). Jednak prawdopodobnie nie powinieneś na tym polegać i po prostu użyćpwd -P
.źródło
/bin/pwd
jest GNU,pwd
gdy POSIXLY_CORRECT nie jest ustawiony. W systemach POSIX, w którychpwd
znajduje się/bin
./bin/pwd
użyje $ PWD i może zwrócić ścieżki z dowiązaniami symbolicznymi. GNU pwd będzie zachowywać się w ten sposób POSIX, gdy znajdzie zmienną POSIXLY_CORRECT w swoim środowisku.