cd und ls verhalten sich in einem Softlink zu einem Verzeichnis unterschiedlich


7

Wenn wir über seinen Softlink in ein Verzeichnis cd, beobachte ich:

  1. ls ..zeigt den Inhalt des übergeordneten Verzeichnisses des verknüpften Verzeichnisses an, während cd ..es unter dem übergeordneten Verzeichnis des Softlinks angezeigt wird. Warum sind sie anders?

  2. cd ..gefolgt von tab gibt keine Optionen für die Vervollständigung an, weder für den Inhalt des übergeordneten Verzeichnisses des verknüpften Verzeichnisses noch für den Inhalt des übergeordneten Verzeichnisses des Softlinks. Warum ist es das?

  3. Woher wissen wir unter allen Verzeichnisbefehlen, welche in der obigen Situation für das verknüpfte Verzeichnis oder für seinen Softlink funktionieren?


1
Ich kann nicht behaupten, eine Antwort darauf zu haben, aber ich weiß, dass cdsich dies entsprechend dem "physischen" Ort, an dem es sich befindet (dh dem mit dir verknüpften Verzeichnis), über den -PSwitch verhält . Zumindest ist das bei Bash so.
Joseph R.

Wenn Sie sich über Ihren Standort sicher sein müssen, sollten Sie jederzeit vollständige Pfade verwenden. Wenn Sie das Verzeichnis in einem Skript ändern und zum Start zurückkehren müssen, speichern Sie es zuerst als Variable mit $ (Basisname $ (readlink -f $ 0)) oder $ (pwd) oder wo immer Sie Dinge ausführen möchten, und legen Sie die Basispositionen ab davon anstatt anzunehmen .. wird tun, was Sie wollen. Es ist auch besser mit anderen Shells kompatibel, die sich möglicherweise noch einmal anders verhalten.
Justin

Antworten:


8

Weil Bash (und möglicherweise andere Muscheln) den Pfad verfolgen, den Sie hinabgestiegen sind, einschließlich Symlinks, damit Ihre Spur wieder nach oben wie die nach unten aussieht.

Bash weiß, wie Sie zum Arbeitsverzeichnis gekommen sind, da cdes sich um eine integrierte Shell handeln muss. Wenn Sie ls ..die Shell ausführen , kann der "symbolische Pfad" nicht ersetzt werden, da er grep ..ebenfalls gültig ist und das Übersetzen ..furchtbar verwirrend wäre.

So wie es ist, hat die Shell derzeit zwei Interpretationen, von ..denen argumentiert werden könnte, dass sie so verwirrend sind, als ob sie nie versucht hätte, überhaupt zu helfen.


1
..sollte das übergeordnete Verzeichnis des Verzeichnisses sein, in dem Sie sich befinden (und sollte im Inode des Verzeichnisses gespeichert sein, in dem Sie sich gerade befinden). Es sollte keine Mehrdeutigkeit geben. Ich mag jedoch Bash-Verhalten, da ich häufiger zu dem Verzeichnis zurückkehren möchte, in dem sich der Link befand (aber cd -oft genug, um dies zu tun ... und pushd/ oder popdhelfen könnte, wenn wir daran denken, sie zu verwenden). Imo, Standard sollte es sein, zum physischen übergeordneten Verzeichnis zu wechseln, und eine Option, die es ermöglicht, zum Verzeichnis des Links zurückzukehren (dass es aus Kompatibilitätsgründen oder aus anderen klugen Gründen umgekehrt ist?)
Olivier Dulac
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.