In ein Verzeichnis gehen, das durch einen Link verbunden ist

12

Wenn ich cdeinen Link habe, wird meinem aktuellen Pfad der Pfad des Links vorangestellt und nicht der Pfad des Verzeichnisses, auf das der Link verweist. Z.B

~/dirlinks/maths$ ls -l logic
lrwxrwxrwx 1 tim tim 71 Jul 27 10:24 logic -> /windows-d/academic discipline/study objects/areas/formal systems/logic

~/dirlinks/maths$ cd logic
~/dirlinks/maths/logic$ pwd
/home/tim/dirlinks/maths/logic

~/dirlinks/maths/logic$ cd ..
~/dirlinks/maths$

Ich möchte, dass mein aktueller Pfad in den Pfad des verknüpften Verzeichnisses geändert wird, damit ich auch mit den übergeordneten Verzeichnissen des verknüpften Verzeichnisses arbeiten kann. Was gibt es neben lsdem Link zum Herausfinden des verknüpften Verzeichnisses und zum Einfügen cdin dieses Verzeichnis einfacher, um dies zu erreichen? cdWie ändern Sie beispielsweise nach dem Einfügen eines Links Ihren aktuellen Pfad in den Pfad des verknüpften Verzeichnisses?

Tim
quelle

Antworten:

22

Mit der POSIX-Shell können Sie die -POption der eingebauten CD verwenden:

cd -P <link>

Mit bash, von man bash:

Die Option -P besagt, dass die physische Verzeichnisstruktur verwendet werden soll, anstatt symbolischen Links zu folgen (siehe auch die Option -P zum Befehl set builtin).

cuonglm
quelle
7
Sie können dies cd -P .nach dem Original tun cd.
Strg-Alt-Delor
5

Sie können verwenden readlink, um zu bestimmen, wo Ihre Verknüpfung verweist, und diese Ausgabe als Ziel Ihrer Verbindung angeben cd.

cd "$(readlink <link>)"

Bei zusätzlichen Symlinks, die auf Symlinks verweisen, readlinkwird lediglich das Ziel bereitgestellt, es sei denn, Sie geben eine der Optionen an, um beispielsweise Symlinks zu einem kanonischen Dateiziel zu folgen readlink -f <link>.

readlink - Druckwert eines symbolischen Links oder eines kanonischen Dateinamens

-f, --canonicalize
canonicalize durch rekursives Folgen jedes Symlinks in jeder Komponente des angegebenen Namens; Alle bis auf die letzte Komponente müssen vorhanden sein

-e, --canonicalize-existierende Canonicalize
durch rekursives Folgen jedes Symlinks in jeder Komponente des angegebenen Namens. Alle Komponenten müssen vorhanden sein

-m, --canonicalize-fehlende Canonicalize,
indem jeder Symlink in jeder Komponente des angegebenen Namens rekursiv verfolgt wird, ohne dass Anforderungen an die Existenz von Komponenten erforderlich sind

Jon Surrell
quelle
5

Korn-ähnliche Shells verfolgen symbolische Links im Pfad zum aktuellen Verzeichnis (dies wird als logische Verfolgung des aktuellen Verzeichnisses bezeichnet). Wenn Sie alle symbolischen Links erweitern möchten, übergeben Sie die Option -Pan das integrierte cdVerzeichnis (für die physische Verfolgung des aktuellen Verzeichnisses):

cd -P logic

Wenn Sie sich in einem Verzeichnis befinden, auf das Sie über einen symbolischen Link zugegriffen haben, und das verfolgte aktuelle Verzeichnis auf den Pfad mit erweiterten symbolischen Links umschalten möchten, führen Sie es aus

cd -P .

Wenn Sie den Pfad zum aktuellen Verzeichnis mit erweiterten symbolischen Links drucken möchten, führen Sie ihn aus pwd -P. Wenn Sie in bash die logische Verfolgung deaktivieren möchten, führen Sie Folgendes aus set -P. in zsh laufen set -woder setopt chase_links.

Gilles 'SO - hör auf böse zu sein'
quelle