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/path
direkt am Zielpfad angekommen .
pwd -P
oderalias pwd='pwd -P'
auchcd -P
anstelle der Symlink auf den physischen Pfad zu gehen.Antworten:
Ihre Shell hat eine eingebaute
pwd
, die versucht "klug" zu sein. Nachdem Siecd
einen Symlink erstellt haben,pwd
fälscht der interne die Ausgabe so, als ob Sie in ein echtes Verzeichnis gewechselt wären.Übergeben Sie die
-P
Option anpwd
, dh ausführenpwd -P
. Die-P
Option (für "physisch") weist Siepwd
an, 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:quelle
Versuchen Sie es
cd -P <symlink_dirname>
.Sie können
set -o physical
dieses Verhalten auch für die gesamte Lebensdauer der laufenden Shell beibehalten.Unter https://stackoverflow.com/questions/10456784/behavior-of-cd-bash-on-symbolic-links finden Sie weitere nützliche Informationen.
quelle