ls .. funktioniert nicht richtig mit Symlinks

ls .. funktioniert nicht richtig mit Symlinks

Ich habe Verzeichnisse ungefähr so ​​eingerichtet

~/code
~/code/src
~/code/build -> /path/to/somewhere/else

Das Letzte ist ein symbolischer Link.

Wenn ich das mache

cd ~/code/build
ls ..

dann bekomme ich die Auflistung für /path/to/somewhere, aber vonSonstige Anmerkungenund meiner eigenen Erfahrung nach hatte ich erwartet, die Auflistung für ~/code– ich könnte schwören, dass es früher andersherum funktioniert hat – zu sehen.

Ich verwende zsh und bash unter Ubuntu. Gibt es dafür eine Einstellung oder ist das tief in POSIX oder so verwurzelt?

Antwort1

Das ist nicht das Problem von ls. So funktionieren symbolische Links. Mit ..gelangen Sie in das übergeordnete Verzeichnis des aktuellen Verzeichnisses, das Verzeichnis weiß nicht, dass Sie über einen symbolischen Link dorthin gelangt sind. Die Shell muss eingreifen, um dieses Verhalten zu verhindern. Für das in der Shell integrierte Element cdgibt es eine spezielle Behandlung, die nicht nur aufruft chdir, sondern sich den vollständigen Verzeichnispfad merkt und versucht, herauszufinden, was Sie möchten. lsist jedoch kein integriertes Element. Die Shell muss ..zu einem anderen Pfad wechseln, bevor sie es an weitergibt, lswenn Sie das erwartete Ergebnis erhalten möchten. zshDie Option CHASE_DOTShilft Ihnen dabei.

Generell sind Symlinks zu Verzeichnissen eine schmutzige Angelegenheit. Für kritische und semi-permanente Anwendungen verwenden Sie lieber mount --bind.

Antwort2

Da Sie Ihre Frage mit „“ markiert haben, zshgehe ich davon aus, dass wir über diese Shell sprechen.

Höchstwahrscheinlich haben Sie oh-my-zshdie Variablen CHASE_LINKSund/oder gesetzt (entweder direkt oder indirekt mit einem externen Skript wie ) CHASE_DOTS. Um dies zu bestätigen, führen Sie aus setopt | grep -i chaseund prüfen Sie, ob sie aufgelistet sind. Wenn ja, setzen Sie sie einfach zurück:

unsetopt CHASE_DOTS
unsetopt CHASE_LINKS

verwandte Informationen