web-dev-qa-db-ja.com

pwdが--physicalのような長いオプションを受け入れないのはなぜですか?

pwdコマンドのマニュアルを表示すると、--physicalなどの長いオプションがサポートされていると表示されます

$ man pwd
PWD(1)                           User Commands                          PWD(1)

NAME
       pwd - print name of current/working directory

SYNOPSIS
       pwd [OPTION]...

DESCRIPTION
       Print the full filename of the current working directory.

       -L, --logical
              use PWD from environment, even if it contains symlinks

       -P, --physical
              avoid all symlinks

ただし、次のように入力すると失敗します

$ pwd --physical
-bash: pwd: --: invalid option
pwd: usage: pwd [-LP]

長いオプションが機能しないのはなぜですか?

RHEL 6.4を使用しています。 pwdのエイリアスは設定されていません。それは標準のパスワードのように見えます:

$ which pwd
/bin/pwd
11
Michal Kordas

bashには組み込みコマンドpwdがあり、シェルにpwdと入力するだけで使用できます。

マンページの説明に従ってpwdを取得するには、外部コマンドを強制的に使用する必要があります。実行可能ファイル(/bin/pwd(あなたの場合)または行の前にenvを追加して:env pwdは、環境に設定を追加するために使用できるenvコマンドを開始します(ただし、ここでは行いません)。次に、envは、指定されたコマンドを開始します。 envには組み込みのpwdがないため、「実際の」/bin/pwdが実行されます。

Bashの組み込みpwdの利点は、bashが現在のディレクトリを追跡するため、値を取得するコストがゼロであるのに対し、外部コマンドはファイルシステム全体を検索して決定する必要があります。より多くのパスIO集中的です。

26
wurtel

そのマンページのドキュメント/bin/pwdですが、pwdを実行すると、組み込みのシェルが使用されます。の出力を見る

type pwd

シェルの組み込みpwdは長いオプションをサポートしていません(シェルのドキュメントをご覧ください。Bashを使用しているため、help pwdは要約を提供します)。

11
Stephen Kitt