Stellen Sie sicher, dass alle Befehle die symbolische Linkverzeichnishierarchie befolgen

531
TTT

Zumindest in der Bash, standardmäßig die Option set +Pgesetzt ist, die wie bestimmte Befehle macht cd, pwdund Tab-Vervollständigung der symbolische Verknüpfung Hierarchie folgen, anstatt die physische Hierarchie. Aber viele andere Befehle lsfolgen einfach der physischen Hierarchie.

Sie können dafür set -Psorgen, dass alle Befehle der physischen Verzeichnisstruktur folgen (oder sie Ihrer ~/.inputrcDatei für dauerhafte Sitzungen hinzufügen ). Was aber, wenn ich den anderen Weg gehen möchte, damit alle (die meisten?) Befehle der symbolischen Verzeichnisstruktur entsprechen? Kann das gemacht werden? Ist das bash-spezifisch? Alternativ ist es eine Möglichkeit, Dinge zu machen, das symbolische Verzeichnis glauben ist körperliche? Und um es klar zu sagen: Ich suche nach einer Einstellung, die das Verhalten über alle möglichen Funktionen hinweg beeinflusst, nicht wie eine Problemumgehung readlink. Am nächsten finde ich diesen Workaround .

Lesen Sie für ein Beispiel, wie Sie unangenehme Ergebnisse erzielen können. Dies kann zu einem verwirrenden Verhalten führen, da Sie in einer Datei / einem Ordner tabulatorfertig machen können, die der Befehl, den Sie ausführen, nicht finden kann. Zum Beispiel (Sie müssen möglicherweise set +Pzuerst tun ):

mkdir symtest1 mkdir symtest1/subdir ln -s symtest1/subdir touch youreinthebasedir #a lovely file to show where you're looking touch symtest1/youreinsymtest1 #yet another pwd #shows where you are cd subdir pwd #should show the same plus "/subdir" ls ../ #should show the contents of "symtest1" 

Geben Sie nun Folgendes mit tab-Vervollständigung ein,
ls ../youretab
und es wird die
../youreinthebasedir
Eingabe abgeschlossen, und Sie erhalten die Fehlermeldung, dass die Datei aufgrund der oben genannten Diskrepanz nicht vorhanden ist.

Weitere nützliche Diskussionen finden Sie hier und hier .

2
Hinweis: POSIX definiert [* übergeordnetes Verzeichnis *] (http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_268) als `das Verzeichnis, das einen Verzeichniseintrag für das angegebene Verzeichnis enthält und dargestellt wird durch den Pfadnamen dot-dot im angegebenen Verzeichnis ". Außerdem [hier] (http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13): `Der spezielle Dateiname dot-dot bezieht sich auf das übergeordnete Verzeichnis seines Vorgängerverzeichnisses`. Ein Symlink ist nicht "ein Verzeichniseintrag für das angegebene Verzeichnis", daher interpretiert Ihre Shell '..' gegen POSIX. "ls" macht es "richtig". Kamil Maciorowski vor 6 Jahren 1
Oh, der obige Kommentar soll die Frage nicht diskreditieren. Ihre Frage ist in Ordnung, ich habe sie bestätigt. Ich gebe nur einige Zusammenhänge und Gründe. Kamil Maciorowski vor 6 Jahren 2
"Alternativ, gibt es eine Möglichkeit, die Dinge glauben zu lassen, dass das symbolische Verzeichnis physisch ist?" - Das kann Sie interessant finden: [Was ist ein Bind-Mount?] (Https://unix.stackexchange.com/q/198590/108618) Kamil Maciorowski vor 6 Jahren 1

0 Antworten auf die Frage