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


11

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

1
マニュアルページは、bashの一部ではないスタンドアロンユーティリティ用です。
— トーマスディッキー

7
使用type代わりにwhichので、which一方のみ示してコマンド、type番組のキーワード、組み込みコマンド、エイリアス、関数、およびコマンド(およびハッシュコマンドパス)。詳細については、「どちら」を使用しないのかを
— wjandrea

1
私のシステムでman pwdはyour shell may have its own version of pwd, which usually supersedes the version described here. Please refer to your shell's documentation for details about the options it supports、DESCRIPTIONセクションの下部に次のメモがあります。
— Nykakin

回答:


26

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

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

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


4
これは、外部コマンドが実際に機能する方法ではありません。 unix.stackexchange.com/a/413225/5132
— JdeBP

ところで:あなたは(少なくともbashでは)シェルの組み込みを無効にすることもできますenable -n pwd
— derobert

@JdeBPこれは私が最後に見たとき(昔):-)でした。現在はgetcwd()システムコールを使用していますが、カーネルは引き続きファイルシステムをトラバースします。これは、関連するデータ構造にアクセスできるため、カーネル空間で実行する方が簡単です。システムカーネルは、文字列を使用して作業ディレクトリを追跡しません。」
— ヴルテル

11

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

type pwd

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

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