Kiedy piszę cd przez dowiązanie symboliczne, dlaczego pwd pokazuje dowiązanie symboliczne zamiast prawdziwej ścieżki?

19

Utworzyłem soft link ( ln -s 1 2) do katalogu, który znajduje się w testkatalogu, otworzyłem soft link ( cd 2) i wyświetlałem bieżącą ścieżkę za pomocą pwd. Wyświetlana ścieżka była ~/test/2i nie ~/test/1.

Jest inaczej w systemie operacyjnym takim jak Windows, skrót prowadzi nas do prawdziwego katalogu. Jestem trochę zdezorientowany, jak to miękkie łącze działa w systemie Linux. Czy to nie jest skrót jak w Windows? Dlaczego ścieżka nie jest ~/test/1?

 $ mkdir test
 $ cd test
 $ mkdir 1
 $ ln -s 1 2
 $ cd 2
 $ pwd
 /home/dazz/test/2
DScript
źródło
2
Dziękujemy za usunięcie zrzutu ekranu. Następnym razem edytuj swoje pytanie zamiast usuwać i publikować ponownie. Usunięcie zbyt wielu własnych pytań może spowodować, że nie będziesz mógł zadawać pytań. Ten zakaz jest automatyczny, więc nie będziemy w stanie wiele z tym zrobić. W każdym razie nie trzeba ponownie publikować, ponieważ edycja podważa pytanie .
terdon
Dlaczego pytasz dwa razy? askubuntu.com/q/610133/367165
AB
AB to samo forum?
DScript

Odpowiedzi:

18

Jest to funkcja powłoki, która pamięta, jak dotarłeś do miejsca, w którym się znajdujesz.
Jeśli masz realpathzainstalowany, możesz:

$ realpath 
/home/dazz/test/1

I brakuje tego, jeśli masz python:

$ python -c "import os; print(os.path.realpath('.'))"
/home/dazz/test/1

lub readlink (z coreutils):

$ readlink -f .
/home/dazz/test/1

lub /bin/pwd(nie wbudowana powłoka pwd):

$ /bin/pwd
/home/dazz/test/1
Anthon
źródło
ls -l /proc/$$/cwdwykorzystuje /procinterfejs systemu plików jądra .
Bruce Ediger
8
Pamiętaj również, pwd -Paby wydrukować fizyczną zamiast logicznej ścieżki do bieżącego katalogu.
godlygeek
8

Kontrast pwdi /bin/pwd.

pwd, które jest wbudowanym poleceniem w wielu powłokach, mówi ci, gdzie twoja powłoka myśli, że jesteś (i dlatego traktuje dowiązania symboliczne jako „miękkie linki” tak, jakby były prawdziwymi katalogami.

/bin/pwdto zewnętrzny program, który informuje cię, gdzie naprawdę jesteś, w razie potrzeby przechodząc do drzewa systemu plików do /. Nie bierze pod uwagę dowiązań symbolicznych, ponieważ nie istnieją one podczas przechodzenia w górę..

roaima
źródło
6

Inne odpowiedzi zostały omówione w /bin/pwdporównaniu do powłoki builtin pwd.

Jeśli chcesz podążać za dowiązaniami symbolicznymi we wspomnianym stylu Windows, użyj cd -P: zmieni odpowiednio zmienną PWD.

Jeśli chcesz używać -Pdomyślnie, możesz dodać ten wiersz do swojego .bashrclub .zshrc:

set -P

Inne muszle mogą się różnić.

David Lord
źródło