私が次のことをしているとしましょう。
cd /some/path
ln -s /target/path symbolic_name
そうする場合:
cd /some/path
cd symbolic_name
pwd
私は得る:
/some/path/symblic_name
いいえ:
/target/path
私が自分でやったように、シェルがシンボリックリンク(CWDアップデートなど)を「完全に解決する」ようにする方法はありますか?
cd /target/path
?
私は私が目標パスにどのように到達したかを「知っている」か「敏感に」見えるいくつかのプログラムを実行する必要がありますcd /target/path
。
答え1
pwd
あなたのシェルには「スマート」になりたい機能が組み込まれています。シンボリックリンクを操作した後、出力は実際のディレクトリに移動したかのようにcd
内部的に偽です。pwd
オプション-P
をに渡しますpwd
(例:run)pwd -P
。この-P
オプション(「物理的」)は、pwd
シンボリックリンク追跡を実行せずにディレクトリへの「実際の」パスを表示するように指示します。
pwd
または、この魔法を実行しない(または実行できない)実際のバイナリも必要です。バイナリを明示的に使用してください。
$ 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
答え2
努力するcd -P <symlink_dirname>
。
tim@ls:~$ mkdir a
tim@ls:~$ ln -s a b
tim@ls:~$ cd b
tim@ls:~/b$ pwd
/home/tim/b
tim@ls:~/b$ cd ..
tim@ls:~$ cd -P b
tim@ls:~/a$ pwd
/home/tim/a
また、set -o physical
実行中のシェルの存続期間中にこの動作が持続するようにすることもできます。
確認するhttps://stackoverflow.com/questions/10456784/behavior-of-cd-bash-on-symbolic-linksより良い情報のために。