Unixビルトイン「PWD」コマンドと$ PWD環境変数の違いは何ですか?

StackOverflow https://stackoverflow.com/questions/4362643

  •  09-10-2019
  •  | 
  •  

質問

これが事実です。ディレクトリコールがあります: - %/home/myname/

私はそのディレクトリでソフトリンクを実行しました: - %cd/home/myname/%ln -s/home/others/。

さて、私は他の人に/ from/ home/ myname/これが興味深い部分です。

Unix組み込みをしたとき pwd コマンド、元のパス名を取得します: - %/home/others/

しかし、$ PWD環境変数をエコーすると、リンクパス名が表示されます。

どうしてこんなことに?

役に立ちましたか?

解決

/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 なぜなら、なぜなら、なぜなら pwd とにかく(より良い定義のために)より良い結果を与えないかもしれません。

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

他のヒント

の違い /bin/pwd 外部コマンドと組み込みは、外部コマンドがどのセットのセットを知らないことです cd 操作はあなたをそこに届けたので、あなたの現在のディレクトリがSymlinksのチェーンのどこかにあるふりをしません。ルートから現在のディレクトリへの直接的なパスを提供します。 realpath() 機能はそうします。

見る set -o physicalbash.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top