Warum zeigt pwd bei der CD-Durchquerung eines Symlinks den Symlink anstelle des tatsächlichen Pfads an?

19

Ich habe einen Softlink ( ln -s 1 2) zu einem Verzeichnis innerhalb des testVerzeichnisses erstellt, den Softlink ( cd 2) geöffnet und den aktuellen Pfad mit angezeigt pwd. Der angezeigte Pfad war ~/test/2und nicht ~/test/1.

Bei einem Betriebssystem wie Windows ist das anders. Die Verknüpfung bringt uns zum eigentlichen Verzeichnis. Ich bin ein bisschen verwirrt, wie dieser Softlink unter Linux funktioniert. Ist es nicht eine Abkürzung wie in Windows? Warum ist der Weg nicht ~/test/1?

 $ mkdir test
 $ cd test
 $ mkdir 1
 $ ln -s 1 2
 $ cd 2
 $ pwd
 /home/dazz/test/2
DScript
quelle
2
Vielen Dank, dass Sie den Screenshot entfernt haben. Bearbeiten Sie beim nächsten Mal Ihre Frage, anstatt sie zu löschen und erneut zu veröffentlichen. Wenn Sie zu viele Ihrer eigenen Fragen löschen, können Sie möglicherweise nicht mehr fragen. Dieses Verbot ist automatisch, sodass wir nicht viel dagegen unternehmen können. In jedem Fall müssen Sie nicht erneut posten, da die Bearbeitung die Frage stößt .
Terdon
Warum fragst du zweimal? askubuntu.com/q/610133/367165
AB
AB gleiches Forum?
DScript

Antworten:

18

Dies ist eine Funktion der Shell, die sich daran erinnert, wie Sie zu Ihrem Standort gekommen sind.
Wenn Sie realpathinstalliert haben, können Sie Folgendes tun:

$ realpath 
/home/dazz/test/1

Und das fehlt, wenn Sie Python haben:

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

oder readlink (von coreutils):

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

oder /bin/pwd(nicht die eingebaute Shell pwd):

$ /bin/pwd
/home/dazz/test/1
Anthon
quelle
ls -l /proc/$$/cwdnutzt die /procDateisystemschnittstelle des Kernels .
Bruce Ediger
8
Beachten Sie auch pwd -P, dass Sie den physischen anstelle des logischen Pfads zum aktuellen Verzeichnis drucken.
Godlygeek
8

Kontrast pwdund /bin/pwd.

pwd, ein in vielen Shells integrierter Befehl, gibt an, wo sich Ihre Shell befindet (und behandelt daher Symlinks als "weiche Links", als wären sie echte Verzeichnisse.

/bin/pwdist ein externes Programm, das Ihnen sagt, wo Sie wirklich sind, wenn nötig, indem es den Dateisystembaum bis zu durchquert /. Symlinks werden nicht berücksichtigt, da diese beim Durchlaufen nach oben nicht vorhanden sind..

Roaima
quelle
6

Andere Antworten haben sich mit denen /bin/pwdder Shell befasst builtin pwd.

Wenn Sie Symlinks im von Ihnen erwähnten Windows-Stil folgen möchten, verwenden Sie cd -P: Dadurch wird die PWD-Variable entsprechend geändert.

Wenn Sie -Pstandardmäßig verwenden möchten , können Sie diese Zeile zu Ihrem .bashrcoder hinzufügen .zshrc:

set -P

Andere Schalen können variieren.

David Lord
quelle