
コマンドのマニュアルを表示すると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 のエイリアスは設定されていません。標準の pwd のようです:
$ which pwd
/bin/pwd
答え1
bash
組み込みコマンドがあり、シェルにpwd
入力するだけで使用できます。pwd
pwd
マニュアルページで説明されているように を取得するには、外部コマンドの使用を強制する必要があります。これを行うには、実行可能ファイルへのフルパス (/bin/pwd
この場合は ) を指定するか、env
行の前に を追加します。これにより、環境に設定を追加するために使用できるコマンドがenv pwd
開始され(ただし、ここでは実行されません)、指定されたコマンドが開始されます。 には組み込み がないため、「実際の」が実行されます。env
env
env
pwd
/bin/pwd
pwd
bash の組み込みの利点はbash
、現在のディレクトリを追跡するため、値の取得にコストがかからないことです。一方、外部コマンドは、パスを決定するためにファイルシステムを検索する必要があり、IO の負荷がはるかに高くなります。
答え2
そのマニュアルページには が記載されています/bin/pwd
が、実行するとpwd
シェル組み込み関数が使われます。
type pwd
シェルの組み込みではpwd
長いオプションはサポートされていません (シェルのドキュメントを参照してください。Bash を使用しているため、help pwd
概要が提供されます)。