UNIX組み込みの `pwd`コマンドと$ PWD環境変数の違いは何ですか?

linux pwd unix
UNIX組み込みの `pwd`コマンドと$ PWD環境変数の違いは何ですか?

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

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

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

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

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

どうしてこんなことに?

  3  0


ベストアンサー

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

「bash」の「set -o physical」を参照してください。

2


/var# ls -l
lrwxrwxrwx  1 root root   10 Aug 22 13:21 mail -> spool/mail
drwxr-xr-x  2 root root 4096 Jul  1 20:58 opt
drwxr-xr-x 22 root root 4096 Dec  5 17:38 run
drwxr-xr-x 12 root root 4096 Aug 22 13:21 spool
drwxrwxrwt 14 root root 4096 Dec  6 02:46 tmp
/var# cd mail
/var/mail# echo $PWD
/var/mail

/var/mail# pwd
/var/mail

/var/mail# /bin/pwd
/var/spool/mail

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

それはなぜですか? / bin / pwd`はOS固有の呼び出しを使用して現在の作業ディレクトリを決定します。Linuxの場合、カーネルは解決されたディレクトリ( / proc / self / cwd`を参照)のみを保持しますが、シェルのpwdにはシェルはそれが入っていると考えます。

2


タイトルとURLをコピーしました