私が使用した2つのコマンドは同じでしたが、同じパラメーターを共有していません。
time -f "%E %C" mycommandtomeasure
/usr/bin/time -f "%E %C" mycommandtomeasure
最初のものは実行されませんが、2番目のものは実行されます。最初のものは-f
パラメーターを見つけることができません。 whereis time
をチェックするとき、パス/usr/bin/time
を取得するので、time
が/usr/bin/time
と同じコマンドであることを理解しています。
どうやら、私の仮定は間違っています。誰かが私を詳しく説明するのを手伝ってもらえますか?
time
コマンドが実際に使用しているtype
コマンドを見てみましょう(help type
を参照):
$ type -a time
time is a Shell keyword
time is /usr/bin/time
したがって、明らかに、システム上のtime
は両方です
/usr/bin/time
Shellキーワードは実行可能ファイルよりも優先されるため、time
のみを入力したときに実際に実行されるのはShellキーワードです。また、type -a
がリストする順序から、またはtype time
だけの出力からもわかります。これは、1つの有効なタイプのみをリストします。
それでは、それぞれが何ができるかを確認しましょう。
実行可能ファイルには通常、マンページ(マニュアルページ)があり、man
コマンド、つまりここman time
を使用して開くことができます。
Bashに組み込まれているものに関するヘルプを表示するには、help
コマンドを使用する必要があります:help time
Shellキーワードは実行可能ファイルよりも少ないオプションをサポートしますが、他の利点があることに注意してください。複雑なBashは、パイプラインのように構築されます。例については、 この回答の終わり を参照してください。
ただし、Shellキーワードの代わりに実行可能ファイルを使用する必要がある場合は、フルパス、つまり/usr/bin/time
を入力するか、コマンドの前にバックスラッシュを付けてBashによる評価を停止できます:\time
ところで、time
はBashのシェルキーワードですが、sh
(ダッシュ)には存在せず、実行可能ファイルのみを取得します。
time
を実行すると、すべての機能をサポートしていない組み込みシェルコマンドを実行します。
/usr/bin/time
を実行すると、実際のGNU time
プログラムを実行します。
常に「実際の」エイリアスを実行するようにエイリアスを設定できます。