シンボリックリンクの解決(pwd)


32

私は次のことをすると言います:

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直接実行したかのようにターゲットパスに到達したと考えてもらいたい。


7
この質問に関連しています。あなたは行うことができますpwd -Palias pwd='pwd -P'また、cd -P代わりにシンボリックリンクの物理パスに行くことに。
マルティンキャナバル

@MartínCanavalありがとう。それが私が探していたものです!
ライアン

回答:


35

シェルには、pwd「スマート」になろうとするビルトインがあります。あなたがした後にcd内部のシンボリックリンクをpwd使用すると、実際のディレクトリに移動しているかのよう偽物に出力します。

合格-Pへのオプションpwd、すなわち実行をpwd -P。この-Pオプション(「物理」)はpwd、シンボリックリンクの追跡を行わず、ディレクトリへの「実際の」パスを表示するように指示します。

あるいは、pwdこの種の魔法を実行しない(さらには実行できない)本物のbinaryも必要です。そのバイナリを明示的に使用してください:

$ 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

12

試してみてください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で詳細を確認してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.