Symbolische Links auflösen (pwd)


32

Angenommen, ich mache Folgendes:

cd /some/path
ln -s /target/path symbolic_name

Wenn ja, dann mache:

cd /some/path
cd symbolic_name
pwd

Ich bekomme:

/some/path/symblic_name

und nicht:

/target/path

Gibt es eine Möglichkeit, die Shell eine symbolische Verknüpfung "vollständig auflösen" zu lassen (dh CWD aktualisieren usw.), als hätte ich dies direkt getan:

cd /target/path

?

Ich muss einige Programme ausführen, die sich "bewusst" oder "sensibel" zu sein scheinen, wie ich zu meinem Zielpfad komme, und ich möchte, dass sie glauben, ich sei cd /target/pathdirekt am Zielpfad angekommen .


7
Bezogen auf diese Frage . Sie tun können , pwd -Poder alias pwd='pwd -P'auch cd -Panstelle der Symlink auf den physischen Pfad zu gehen.
Martín Canaval

@ MartínCanaval Danke; das habe ich gesucht!
Ryan

Antworten:


35

Ihre Shell hat eine eingebaute pwd, die versucht "klug" zu sein. Nachdem Sie cdeinen Symlink erstellt haben, pwdfälscht der interne die Ausgabe so, als ob Sie in ein echtes Verzeichnis gewechselt wären.

Übergeben Sie die -POption an pwd, dh ausführen pwd -P. Die -POption (für "physisch") weist Sie pwdan, keine symbolische Linkverfolgung durchzuführen und den "realen" Pfad zum Verzeichnis anzuzeigen.

Alternativ sollte es auch eine echte Binärdatei geben pwd, die diese Art von Magie nicht beherrscht (und auch nicht beherrscht). Verwenden Sie einfach diese binäre Explizität:

$ type -a pwd
pwd is a shell builtin
pwd is /bin/pwd
$ mkdir a
$ ln -s a b
$ cd b
$ pwd
/home/michas/b
$ /bin/pwd
/home/michas/a

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.