Linux symbolische Links: Wie gehe ich in das Verzeichnis, in das das Verzeichnis zeigt?

819
Pietro

Ich habe ein Projekt in einem eigenen Verzeichnis:

/ dir / zu / projekt /

Ich habe einen symbolischen Link zu diesem Verzeichnis auf dem Desktop:

/ home / benutzer / desktop / projekt /

Wenn ich auf diesen Link doppelklicke, wird das folgende Verzeichnisfenster geöffnet:

/ home / benutzer / desktop / projekt /

anstelle des wirklichen /dir/to/project.

Dasselbe passiert mit der Kommandozeile (Bash).

Ist es möglich, das zu bekommen, was ich möchte, dh in das Verzeichnis zu wechseln, in dem es statt des symbolischen Verzeichnisses angezeigt wird?

Hinweis: Die Windows-Umgebung, die ich jetzt verwende, ist Xfce, aber ich interessiere mich auch für eine generische Antwort.

0
Wenn Sie eine Windows-ähnliche Verknüpfung wünschen, verwenden Sie eine [.desktop-Datei] (https://askubuntu.com/questions/2484/what-does-examples-desktop-do). xenoid vor 6 Jahren 0

3 Antworten auf die Frage

5
Kamil Maciorowski

In bashden cdeingebauten Verwendungen -Pund -LSchalter; pwdversteht sie auf dieselbe Weise:

user@host:~$ ln -s /bin foobar user@host:~$ cd -L foobar # follow link user@host:~/foobar$ pwd -L # print $PWD /home/user/foobar user@host:~/foobar$ pwd -P # print physical directory /bin user@host:~/foobar$ cd - # return to previous directory /home/user user@host:~$ cd -P foobar # use physical directory structure user@host:/bin$ pwd -L # print $PWD /bin user@host:/bin$ pwd -P # print physical directory /bin 

Außerdem cd ..kann es schwierig sein:

user@host:/bin$ cd user@host:~$ cd -L foobar user@host:~/foobar$ cd -L .. # go up, to ~/ user@host:~$ cd -L foobar user@host:~/foobar$ cd -P .. # go up, but not to ~/ user@host:/$ 

Siehe help cdund help pwd. Beachten Sie, dass Sie möglicherweise auch eine ausführbare Datei (dh keine eingebaute Shell) haben /bin/pwd, die sich ähnlich verhält. In meinem Kubuntu ist der Unterschied der pwdbuiltin ohne Option verwendet, -Lwährend /bin/pwdstandardmäßig verwendet -P.

Sie können das Standardverhalten von cdbuiltin durch set -P( cdals cd -P) und set +P( cdals cd -L) festlegen . Siehe help setfür weitere Einzelheiten.

2
xenoid

Verwenden Sie readlinkdiese Option, um den Link zu seinem Ziel aufzulösen:

cd $(readlink thelink) 

Sie möchten möglicherweise eine Funktion in Ihrem bash-Profil definieren:

function cdl { local dir=$(readlink -e $1); [[ -n "$dir" ]] && cd $dir; } 
@ KamilMaciorowski - Deiner ist der beste Ansatz. Wenn Sie es als Antwort schreiben (mit Details dazu, wie Sie dasselbe von der GUI aus tun), stelle ich es als das akzeptierte ein. Pietro vor 6 Jahren 0
@ KamilMaciorowski - OK zum Verhalten der GUIs. Wenn Sie Ihren Kommentar erneut als Antwort schreiben, werde ich ihn akzeptieren. Pietro vor 6 Jahren 0
1
C0deDaedalus

Ich weiß nicht, wie ich es in der grafischen Benutzeroberfläche erreichen kann, aber es gibt eine Problemumgehung in der Befehlszeile.

Sagen Sie, Ihr symbolischer Link lautet:

/home/user/Desktop/project/ 

Dann können Sie den readlink- Befehl verwenden, um einen aufgelösten symbolischen Link oder dessen kanonischen Dateinamen zu erhalten. Dann einfach cddazu.

cd `readlink /home/user/Desktop/project` 

readlinkLöst hier den Linknamen auf und geht dann zur cdVerwendung der Substitution über .

Wenn Sie sich bereits im Desktop-Ordner befinden, müssen Sie keinen absoluten Pfad angeben, sondern projecttun dies

cd `readlink project` 

Wenn Sie diesen Ordner häufig besuchen, können Sie eine einzeilige Funktion in bash schreiben:

function cdproject { cd `readlink home/user/Desktop/project`; }