pwdと$ PWDの使用の違い


9

現在/現在の作業ディレクトリを印刷するには $PWD環境変数コマンド pwdを使用できます。それで、両方の使用法の違いは何ですか?または特定の目的のために何を選択すべきですか?

回答:


10

それはあなたが何をしているかに依存します。まず$PWD、環境変数でpwdあり、組み込みシェルまたは実際のバイナリです。

$ type -a pwd
pwd is a shell builtin
pwd is /bin/pwd

フラグ$PWDを使用しない限り、bashビルトインは現在の値を出力するだけです-P。で説明されているようにhelp pwd

pwd: pwd [-LP]
Print the name of the current working directory.

Options:
  -L    print the value of $PWD if it names the current working
    directory
  -P    print the physical directory, without any symbolic links

By default, `pwd' behaves as if `-L' were specified.

pwdバイナリは、一方を介してカレントディレクトリを取得し、getcwd(3)同じ値を返すシステムコールreadlink -f /proc/self/cwd。説明のために、別のディレクトリへのリンクであるディレクトリに移動してみてください。

$ ls -l
total 4
drwxr-xr-x 2 terdon terdon 4096 Jun  4 11:22 foo
lrwxrwxrwx 1 terdon terdon    4 Jun  4 11:22 linktofoo -> foo/
$ cd linktofoo
$ echo $PWD
/home/terdon/foo/linktofoo
$ pwd
/home/terdon/foo/linktofoo
$ /bin/pwd
/home/terdon/foo/foo

だから、結論では、(Ubuntuなど)GNUシステム上で、pwdそしてecho $PWDあなたが使用しない限り等価です-Pオプションが、/bin/pwd異なっていると振る舞うが好きpwd -P


1つの違いは、可能な場合に$ PWDを使用すると、echoやpwdなどのサブコマンドのフォークが回避されることです。これにより、パフォーマンスとプログラムのトレースに有利です。
Joe Atzberger、2014年

3

シンボリックリンクを含め、すべての作業ディレクトリに対してオプションなしで使用すると、どちらも同じ結果を返します。

しかし、からman pwd

-P, --physical
    avoid all symlinks

これはpwd -P、他のディレクトリを指すシンボリックリンクで実行すると、元のディレクトリへのパスが出力されることを意味します。

例として、/var/run指すシンボリックリンク/runがあり、現在/var/run/ディレクトリにいる場合は、次のコマンドを実行します。

echo $PWD

戻ります:

/var/run

と同じになりpwdます。ただし、次を実行した場合:

pwd -P

戻ります

/run

したがって、必要なパスによって異なります。シンボリックリンクのない実際のパス、またはシンボリックリンクを無視する現在のディレクトリです。間の唯一の違いpwd -Pecho $PWDシンボリックリンクがあるときです。

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