4

これがケースです。ディレクトリ呼び出しがあります:- %/home/myname/

そのディレクトリにソフトリンクを作成しました:- %cd /home/myname/ %ln -s /home/others/ 。

ここで、/home/myname/ から other/ に cd します。ここが興味深い部分です。

UNIX組み込みpwdコマンドを実行すると、元のパス名が取得されます:- %/home/others/

しかし、$PWD 環境変数をエコーすると、リンク パス名が取得されます:- %/home/myname/others/

どうしてこんなことに?

4

3 に答える 3

2

/bin/pwd外部コマンドとビルトインの違いは、外部コマンドはどのcd操作セットがそこに到達したかを知らないため、現在のディレクトリがシンボリックリンクのチェーンのどこかにあると偽らないことです。realpath()関数のように、ルートから現在のディレクトリへの直接パスを提供します。

を参照set -o physicalしてくださいbash

于 2010-12-06T02:21:57.330 に答える
2
/var# ls -l
lrwxrwxrwx 1 root root 10 Aug 22 13:21 メール -> スプール/メール
drwxr-xr-x 2 ルート ルート 4096 7 月 1 日 20:58 オプション
drwxr-xr-x 22 ルート ルート 4096 12 月 5 日 17:38 実行
drwxr-xr-x 12 ルート ルート 4096 8 月 22 日 13:21 スプール
drwxrwxrwt 14 ルート ルート 4096 12 月 6 日 02:46 tmp
/var# CD メール
/var/mail# echo $PWD
/var/メール

/var/mail# pwd
/var/メール

/var/mail# /bin/pwd
/var/spool/メール

言い換えれば、使用する$PWDだけで十分pwdです。とにかく、より良い結果が得られない可能性があるためです (より良い定義について)。

それはなぜですか?/bin/pwdOS 固有の呼び出しを使用して現在の作業ディレクトリを決定します。Linux の場合、カーネルは解決されたディレクトリのみを保持しますが (「参考文献」を参照/proc/self/cwd)、シェルの pwds には、シェルが認識したディレクトリが含まれます。

于 2010-12-06T02:23:50.620 に答える