Utworzyłem soft link ( ln -s 1 2
) do katalogu, który znajduje się w test
katalogu, otworzyłem soft link ( cd 2
) i wyświetlałem bieżącą ścieżkę za pomocą pwd
. Wyświetlana ścieżka była ~/test/2
i 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
shell
symlink
cd-command
DScript
źródło
źródło
Odpowiedzi:
Jest to funkcja powłoki, która pamięta, jak dotarłeś do miejsca, w którym się znajdujesz.
Jeśli masz
realpath
zainstalowany, możesz:I brakuje tego, jeśli masz python:
lub readlink (z coreutils):
lub
/bin/pwd
(nie wbudowana powłokapwd
):źródło
ls -l /proc/$$/cwd
wykorzystuje/proc
interfejs systemu plików jądra .pwd -P
aby wydrukować fizyczną zamiast logicznej ścieżki do bieżącego katalogu.Kontrast
pwd
i/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/pwd
to 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ę..
źródło
Inne odpowiedzi zostały omówione w
/bin/pwd
porównaniu do powłokibuiltin 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ć
-P
domyślnie, możesz dodać ten wiersz do swojego.bashrc
lub.zshrc
:Inne muszle mogą się różnić.
źródło